Я пытаюсь извлечь красный цвет из изображения. У меня есть код, который применяет порог, чтобы оставить только значения из указанного диапазона:
Код: Выделить всё
img=cv2.imread('img.bmp')
img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_red = np.array([0,50,50]) #example value
upper_red = np.array([10,255,255]) #example value
mask = cv2.inRange(img_hsv, lower_red, upper_red)
img_result = cv2.bitwise_and(img, img, mask=mask)
Но, как я проверил, красный может иметь значение оттенка в диапазоне, скажем, от 0 до 10, а также в диапазоне от 170 до 180. Поэтому я бы хотелось бы оставить значения из любого из этих двух диапазонов. Я попробовал установить порог от 10 до 170 и использовать функцию cv2.bitwise_not(), но тогда я также получаю весь белый цвет. Я думаю, что лучшим вариантом было бы создать маску для каждого диапазона и использовать их оба, поэтому мне придется как-то объединить их, прежде чем продолжить.
Есть ли способ объединить две маски с помощью OpenCV? Или есть какой-то другой способ достичь своей цели?
Изменить. Я пришел с не очень элегантным, но рабочим решением:
Код: Выделить всё
image_result = np.zeros((image_height,image_width,3),np.uint8)
for i in range(image_height): #those are set elsewhere
for j in range(image_width): #those are set elsewhere
if img_hsv[i][j][1]>=50 \
and img_hsv[i][j][2]>=50 \
and (img_hsv[i][j][0] =170):
image_result[i][j]=img_hsv[i][j]
Это в значительной степени удовлетворяет мои потребности, и функции OpenCV, вероятно, делают почти то же самое, но если есть лучший способ сделать это (используя какую-то специальную функцию и написав меньше кода ) пожалуйста, поделитесь этим со мной.
Подробнее здесь:
https://stackoverflow.com/questions/303 ... hon-opencv