我是Python的新手,我想找到二进制映像的极端。黑色背景中间有一个白色的形状,我想找到顶部,底部,左侧和右侧的封闭矩形。
我这样做的方法是找到各个方向上的第一个非零像素。
我的功能是这样,但仅在Y轴上有效。如何设法通过X轴?
def first_non_zero(img):
width = img.shape[1]
height = img.shape[0]
idx = 0
result = 0
for j in range(0, height):
idx = np.argmax(img[j])
if idx > 0:
result = j
break
return result
答案 0 :(得分:2)
我只需使用numpy.nonzero
,然后找到每个轴的最小值和最大值。
脚本:
import cv2
import numpy as np
img = cv2.imread('blob_in_the_middle.png', cv2.IMREAD_GRAYSCALE)
positions = np.nonzero(img)
top = positions[0].min()
bottom = positions[0].max()
left = positions[1].min()
right = positions[1].max()
output = cv2.rectangle(cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
, (left, top), (right, bottom), (0,255,0), 1)
cv2.imwrite('blob_with_bounds.png', output)
示例输入
:示例输出: