Я использую Open CV в python, и я извлек некоторые точки из тестовой операции контура и точечного полигона. (Я в основном использовал тест pointpolygon, чтобы проверить, находятся ли некоторые пиксели внутри контура или нет). Теперь я получил очки, но я хочу визуально подтвердить, находятся ли мои точки на самом деле внутри контура или нет. Как go об этом? В идеале я хочу сначала нарисовать контур, а затем нанести выделенные пиксели. Я могу нарисовать контур, используя функции drawcontours, но для построения этих точек единственный способ, которым я знаю, это plt.scatter, который больше использует matplotlib вместо opencv.
Может быть что-то принципиально неправильное в том, как я к этому подхожу, потому что такое чувство, что должен быть более простой способ сделать это, которого я скучаю. Вот фрагмент кода того, что у меня есть для справки.
Редактировать : По предложению Марка Сетчелла добавлен фрагмент кода, где я использую изображение [x, y], чтобы установить цвет для определенного пикселя. Тем не менее, (x, y) является декартовой координатой в моем случае, и она не работает, если я задаю ее как пиксельную координату изображения.
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('ti.png',1)
plt.imshow(img)
ret, thresh = cv2.threshold(img, 250, 300, cv2.THRESH_BINARY_INV)
greySrc = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
laplacianSrc= cv2.Laplacian(greySrc, cv2.CV_8U, greySrc, ksize = 5)
contours, hierarchy=cv2.findContours(laplacianSrc, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
indices = np.where(img!= [0])
coordinates = zip(indices[0], indices[1])
pts=list(coordinates)
in_or_out=[cv2.pointPolygonTest(contours[0],point,measureDist=False) for point in pts]
pts_ins_ctr=[x for x, y in zip(pts, in_or_out) if y == 1]
xi=[pts_ins_ctr[i][0] for i in range(len(pts_ins_ctr))]
yi=[pts_ins_ctr[i][1] for i in range(len(pts_ins_ctr))]
img[np.array(pts_ins_ctr)]=np.array([255,0,0],dtype=np.uint8)
plt.imshow(img)
Входное изображение
выходное изображение