Python OpenCV контурные черные пиксели на чистом белом холсте - PullRequest
1 голос
/ 12 апреля 2020

Чтобы подробнее узнать о моем ожидаемом результате, я приложил файл test.png и то, что я хочу, чтобы этот сценарий делал.

По сути, вам каким-то образом нужно найти все черные пиксели и некоторые как найти начало и конец их расположения.

Затем я хочу увеличить это, так сказать, хочу выделить выделенные пиксели (содержимое в зеленом квадрате) в свое собственное изображение и сохранить его.

Все мои изображения либо черно-белое, другого цвета нет.

Исходное изображение

enter image description here

Исходное изображение

enter image description here

Извлечено из итогового изображения

enter image description here

Если бы кто-нибудь мог помочь мне с этим, это было бы супер оценили! Я пытался использовать Opencv Python, чтобы как-то найти черные пиксели, но все мои попытки потерпели неудачу.

1 Ответ

1 голос
/ 12 апреля 2020

Вот один из способов сделать это в Python / OpenCV.

  • Считать ввод
  • Преобразовать в серый
  • Инвертировать полярность (области для контуров должны быть быть белым)
  • Порог
  • Получить контуры
  • Получить ограничивающие прямоугольники
  • Обрезать области на входе в соответствии с ограничивающими прямоугольниками
  • Сохранить на диске

Ввод:

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread("black_pixels.png")

# convert img to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# invert polarity
gray = 255 - gray

# do adaptive threshold on gray image
thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY)[1]

# Get contours
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
i = 1
for c in cnts:
    # create white image
    result = np.full_like(img, (255,255,255))
    # get bounding box
    x,y,w,h = cv2.boundingRect(c)
    # crop region of img using bounding box
    region = img[y:y+h, x:x+w]
    # save region to new image
    cv2.imwrite("black_region_{0}.png".format(i), region)
    i = i + 1


# display it
cv2.imshow("IMAGE", img)
cv2.imshow("GRAY", gray)
cv2.imshow("THRESHOLD", thresh)
cv2.waitKey(0)


Результат:

enter image description here

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