Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在图像中查找第一个非零值_Python_Numpy_Opencv - Fatal编程技术网

Python 在图像中查找第一个非零值

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):

我对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):
        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)

这可能有助于。。。