# Finding Leftmost and Rightmost Edge of Binary 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. #### 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])
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 close merge delete

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.

Sort by » oldest newest most voted

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

more 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.

more

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

more

Official site

GitHub

Wiki

Documentation