Ask Your Question

finding absolute straight lines/ rectangles for contours

asked 2019-04-01 15:22:28 -0600

shariq_azim gravatar image

updated 2019-04-01 21:36:21 -0600

supra56 gravatar image

While trying to detect the straight lines in an image, I'm unable to find the Hough transform of the image.

I have first converted the image to grayscale but unable to find the straight lines. image description

Thus, can you help me to make the contours which were detected as pure straight lines/rectangles. Such that I can easily find the horizontal lines(i will do it later) in the image.

`def hou():
   import math
   img = cv2.imread('image5GR.jpg')
   #gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
   edges = cv2.Canny(img,50,150,apertureSize = 3)
   minLineLength = 20
   maxLineGap = 10
   lines = cv2.HoughLinesP(edges,1,math.pi/180,100,minLineLength,maxLineGap)
   for x1,y1,x2,y2 in lines[0]:
   while True:
     if cv2.waitKey(20) & 0xFF == 27:

import cv2    

Finally, the image I am getting, which isn't appropriate(only shows a small green line at the bottom) image description

same question is posted in StackOverflow question

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2019-04-01 21:34:17 -0600

supra56 gravatar image

Here is code:

#!/usr/bin/env python3.5
#Opencv 4.0.1
#Date: 1st April, 2019

import cv2

img =  cv2.imread('img.jpg')
im2 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(im2,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

for i in range(0,len(contours)):
    cnt = contours[i]
    cv2.drawContours(img, [cnt],-1,(0,255,0)) 
    cv2.imshow('Features', img)

Output: image description

edit flag offensive delete link more



take my bow and respects sir !!! <3

you solved my initial problem with which i was struggling. next i would be looking to extract the horizontal lines only . do you have any recommendations for it too?

shariq_azim gravatar imageshariq_azim ( 2019-04-02 08:03:28 -0600 )edit

You can use ROI.

supra56 gravatar imagesupra56 ( 2019-04-02 08:43:48 -0600 )edit

no no i mean, during the lines are generation how can i only draw horizontal lines instead of those having slope more than some angles.

because for i in range(0,len(contours)): cnt = contours[i] returns some point cordinates but line start and points, as i understood.

shariq_azim gravatar imageshariq_azim ( 2019-04-02 10:34:26 -0600 )edit

Shariq, Used cv2.polylines or cv2.HoughLinesS. I wouldn't recommended HoughLineP.

supra56 gravatar imagesupra56 ( 2019-04-02 11:13:23 -0600 )edit


the original image is this: image description

while I'm trying to derive something like this image description as you notice there are two lines as marked .

only once i know the coordinates and dimensions of the lines i can make some decisions out of it. :)

shariq_azim gravatar imageshariq_azim ( 2019-04-02 11:56:24 -0600 )edit

Ok. I see that u're posted original image. That is fine.

supra56 gravatar imagesupra56 ( 2019-04-02 15:46:39 -0600 )edit

Shariq, I have to redo it over again because original image. In meantime, I am very busy for home renovation.

supra56 gravatar imagesupra56 ( 2019-04-02 15:54:12 -0600 )edit

it is ok Supra, atleast you are taking your time for me. :) Btw, let me also tell you, that whole intention is to get process data and decide movement of a robot. so its ok if the lines are close if not perfect

shariq_azim gravatar imageshariq_azim ( 2019-04-03 05:29:39 -0600 )edit

Question Tools

1 follower


Asked: 2019-04-01 15:22:28 -0600

Seen: 4,056 times

Last updated: Apr 01 '19