Ask Your Question
0

Finding Leftmost and Rightmost Edge of Binary Image

asked 2015-06-12 12:16:37 -0600

jonlwowski012 gravatar image

I am trying to find the leftmost and rightmost edge of a binary image like the one attached. I am currently doing this by using a for loop starting from the center of the white portion and working towards a direction until I get to my first black pixel. This works great except it is very slow. Is there any other ways to do this, but in a faster way. Thanks all who reply.

Binary Image

#### Start Image Processing #########

hsv = cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV)
lower_red = np.array([0,100,100])
upper_red = np.array([10,255,255])
mask = cv2.inRange(hsv, lower_red, upper_red)
mat=cv.GetMat(cv.fromarray(mask))
moments=cv.Moments(mat)
yc_red= moments.m01/moments.m00
xc_red=moments.m10/moments.m00
width, height = cv.GetSize(mat)
max_right_red_x = 0
for a in range(int(round(xc_red)), width, 3):
     for b in range (0, height, 3):
        if(mat[b,a] == 0):
           continue
        elif(a > max_right_red_x):
           max_right_red_x = a
           max_right_red_y = b
max_left_red_x = width
for a2 in range(int(round(xc_red)), 0, -3):
     for b2 in range (0, height, 3):
        if(mat[b2,a2] == 0):
           continue
        elif(a2 < max_left_red_x):
           max_left_red_x = a2
           max_left_red_y = b2

### End of Image Processing ######
edit retag flag offensive close merge delete

Comments

I do not know if you can find the LineIterator() function in python, but that I think would fit your problem. You can have a look also in this asnswer from @berak in order to see how you can use it.

theodore gravatar imagetheodore ( 2015-06-12 13:28:00 -0600 )edit

3 answers

Sort by ยป oldest newest most voted
1

answered 2015-06-18 12:22:50 -0600

jonlwowski012 gravatar image

I found out how to do it. I just followed this website's tutorials.

http://opencvpython.blogspot.com/2012...

edit flag offensive delete link more
2

answered 2015-06-12 16:17:45 -0600

Guyygarty gravatar image

An alternative solution to findcontours is to project the image on the one axis using reduce. This will give you a vector which has zeros only in the columns(or rows) for which all pixels in the original image are also zeros. guy

edit flag offensive delete link more

Comments

nice thought ;-)

theodore gravatar imagetheodore ( 2015-06-12 18:50:57 -0600 )edit
1

answered 2015-06-12 13:11:04 -0600

unxnut gravatar image

You can use findContours to get the contours of your image. For each contour, you can look at the bounding box to find the top left and bottom right pixel locations. Iterating over the contours should give you the leftmost and rightmost edge locations in the image.

edit flag offensive delete link more

Question Tools

2 followers

Stats

Asked: 2015-06-12 12:16:37 -0600

Seen: 7,006 times

Last updated: Jun 18 '15