Нахождение первого ненулевого значения в изображении - PullRequest
0 голосов
/ 21 ноября 2018

Я довольно новичок в 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

1 Ответ

0 голосов
/ 21 ноября 2018

Я бы просто использовал 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)

Пример ввода:

Пример вывода:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...