Вот один из способов сделать это с Python / OpenCV / Numpy.
- Создание маски для региона
- Создание маски из цветов
- Объединение масок
- Получение координат, где комбинированная маска не черная
Ввод:
import cv2
import numpy as np
# load image
img = cv2.imread("monet2.jpg")
# create region mask
mask1 = np.zeros_like(img)[:,:,0]
mask1[0:0+75, 90:90+75] = 255
# create color mask
lower =(0,100,150) # lower bound for each channel
upper = (40,160,2100) # upper bound for each channel
mask2 = cv2.inRange(img, lower, upper)
# combine masks
mask3 = cv2.bitwise_and(mask1, mask2)
# get coordinates
coords = np.argwhere(mask3)
for p in coords:
px = (p[0],p[1])
print (px)
# apply mask to image (to see where data is obtained)
mask3 = cv2.merge([mask3,mask3,mask3])
img_masked = cv2.bitwise_and(img, mask3)
# display images
cv2.imshow("mask1", mask1)
cv2.imshow("mask2", mask2)
cv2.imshow("mask3", mask3)
cv2.imshow("img_masked", img_masked)
cv2.waitKey(0)
# write results to disk
cv2.imwrite("monet2_mask1.jpg", mask1)
cv2.imwrite("monet2_mask2.jpg", mask2)
cv2.imwrite("monet2_mask3.jpg", mask3)
cv2.imwrite("monet2_masked.jpg", img_masked)
Маска региона:
Цветовая маска:
Комбинированная маска:
Маскированное изображение:
Список координат:
(6, 128)
(7, 122)
(7, 125)
...
(63, 125)
(63, 126)
(63, 134)
(63, 135)