Python 在图像中查找第一个非零值
我对Python非常陌生,我想找出二进制图像的极限。在黑色背景的中间有一个白色的形状,我想找到顶部、底部、左、右包围矩形。< /P> 我的方法是找到所有方向上的第一个非零像素 我的函数是这样的,但它只在Y轴上工作。如何通过X轴Python 在图像中查找第一个非零值,python,numpy,opencv,Python,Numpy,Opencv,我对Python非常陌生,我想找出二进制图像的极限。在黑色背景的中间有一个白色的形状,我想找到顶部、底部、左、右包围矩形。< /P> 我的方法是找到所有方向上的第一个非零像素 我的函数是这样的,但它只在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):
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
我只是简单地使用,然后找到每个轴的最小值和最大值
脚本:
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)
样本输入:
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)
样本输出:
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)
这可能有助于。。。