Как указано в комментариях, вот возможное решение для извлечения значений BGR (!) Из пикселей изображения внутри ранее найденного контура. Правильное обнаружение нужных цветных полос здесь опущено, что также обсуждается в комментариях.
Имея изображение и заполненную маску контура, например от cv2.drawContours
, мыможно просто использовать индексирование логического массива NumPy путем преобразования маски (наиболее вероятно uint8
) в массив bool_
.
Вот фрагмент кода, который использует * в NumPy1013 * для хранения всех значений в каком-то файле txt
:
import cv2
import numpy as np
# Some dummy image
img = np.zeros((100, 100, 3), np.uint8)
img = cv2.rectangle(img, (0, 0), (49, 99), (255, 0, 0), cv2.FILLED)
img = cv2.rectangle(img, (50, 0), (99, 49), (0, 255, 0), cv2.FILLED)
img = cv2.rectangle(img, (50, 50), (99, 99), (0, 0, 255), cv2.FILLED)
# Mask of some dummy contour
mask = np.zeros((100, 100), np.uint8)
mask = cv2.fillPoly(mask, np.array([[[20, 20], [30, 70], [70, 50], [20, 20]]]), 255)
# Show only for visualization purposes
cv2.imshow('img', img)
cv2.imshow('mask', mask)
# Convert mask to boolean array
mask = np.bool_(mask)
# Use boolean array indexing to get all BGR values from img within mask
values = img[mask]
# For example, save values to txt file
np.savetxt('values.txt', values)
cv2.waitKey(0)
cv2.destroyAllWindows()
Фиктивное изображение выглядит следующим образом:
фиктивная контурная маска выглядит следующим образом:
В результате values.txt
содержит более 1000 записей, пожалуйста, проверьте себя. Внимание: значения являются значениями BGR;например, для получения значений RGB требуется предварительное преобразование изображения в RGB.
Надеюсь, это поможет!