Как проверить цвет пикселей внутри многоугольника и удалить многоугольник, если он содержит белые пиксели, используя python? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть многоугольник, скажем,

polyg = np.array([[[247,358],[247,361],[260,361],[268,362],[288,363],[303,365],[314,365],[315,364],[247,358]]],np.int32) 

Я хочу определить цвет пикселей внутри этого многоугольника, и если он имеет более 5 белых пикселей, многоугольник должен быть удален с изображения.

Может кто-нибудь мне помочь. Спасибо !!

1 Ответ

2 голосов
/ 01 апреля 2020

Вот один из способов сделать это в Python / OpenCV. Однако я не уверен, что вы подразумеваете под «удалением» многоугольника. Далее я делаю область многоугольника черным.

  • Считывание ввода
  • Преобразовать его в серый
  • Определить вершины многоугольника
  • Создать маску для многоугольника
  • Получить цвета пикселей для серого изображения с маской 255
  • Подсчитать количество белых
  • Если счет больше 5, сделать область многоугольника на входном изображении черной; в противном случае оставьте его в покое
  • Сохраните результаты

Ввод:

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('barn.png')

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

# define polygon points
points = np.array( [[[200,0],[230,0],[230,30],[200,30]]], dtype=np.int32 )

# draw polygon on input to visualize
img_poly = img.copy()
cv2.polylines(img_poly, [points], True, (0,0,255), 1)

# create mask for polygon
mask = np.zeros_like(gray)
cv2.fillPoly(mask,[points],(255))

# get color values in gray image corresponding to where mask is white
values = gray[np.where(mask == 255)]

# count number of white values
count = 0
for value in values:
    if value == 255:
        count = count + 1
print("count =",count)

if count > 5:
    result = img.copy()
    result[mask==255] = (0,0,0)
else:
    result = img


# save results
cv2.imwrite('barn_polygon.png', img_poly)
cv2.imwrite('barn_mask.png', mask)
cv2.imwrite('barn_poly_result.png', result)

cv2.imshow('barn_poly', img_poly)
cv2.imshow('barn_mask', mask)
cv2.imshow('barn_result', result)
cv2.waitKey()


Ввод, показывающий красный многоугольник (только квадрат):

enter image description here

Маска:

enter image description here

Число сообщений:

count = 36


Результирующее изображение с чернением многоугольника:

enter image description here

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