в своих проектах я каждую границу отдельно находил. у вас к тому же не учитывается вариант, что только один пиксель в строке будет border_color, а вы посчитаете эту строку за рамку. Нужно проверять, что все пиксели в конкретной строке имеют border_color
#find left border
left_border = width - 1
for i in range(0, width):
border_ended = False
for j in range(0, height): #we must ensure all pixels on this column have border_color
if not np.array_equal(img[i,j], border_color):
border_ended = True
left_border = i
break
if border_ended:
break
#find right border. same, but reversed, from right to left
right_border = 0
for i in reversed(range(0, width)):
border_ended = False
for j in range(0, height):
if not np.array_equal(img[i,j], border_color):
border_ended = True
right_border = i
break
if border_ended:
break
#top border
top_border = height-1
for j in range(0, height):
border_ended = False
for i in range(0, width):
if not np.array_equal(img[i,j], border_color):
border_ended = True
top_border = j
break
if border_ended:
break
#bottom border
bottom_border = height-1
for j in reversed(range(0, height)):
border_ended = False
for i in range(0, width):
if not np.array_equal(img[i,j], border_color):
border_ended = True
bottom_border = j
break
if border_ended:
break