【问题标题】:Finding first non-zero value in an image在图像中找到第一个非零值
【发布时间】:2018-11-21 05:30:01
【问题描述】:

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

【问题讨论】:

标签: python numpy opencv


【解决方案1】:

我只需使用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)

示例输入:

示例输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多