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])
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 ######
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.