Чтение нижнего и верхнего пороговых массивов при использовании с inRange - PullRequest
0 голосов
/ 01 февраля 2019

Я читал о том, как фильтровать цвета с помощью OpenCV, и наткнулся на следующий фрагмент:

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_red = np.array([0,160,50])
upper_red = np.array([255,255,180])


mask = cv2.inRange(hsv, lower_red, upper_red)
res = cv2.bitwise_and(img,img, mask= mask)

Что означает каждое значение в lower_red?Обозначает ли он нижний и верхний пределы H, S, V последовательно?Должно ли оно читаться как минимальное значение H как 0 и максимальное значение H как 255?

Я хочу отфильтровать красный цвет.

1 Ответ

0 голосов
/ 02 февраля 2019

Вы уже в пути.Я добавил код, который показывает решение вашей проблемы - объединение двух цветовых диапазонов HSV в одну маску.

Результат:

enter image description here

Код:

import numpy as np 
import cv2
# load image
img = cv2.imread("HSV.JPG")
# convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# Create first mask
lower_red = np.array([0,150,50])
upper_red = np.array([5,255,255])
# Threshold the HSV image to get only green colors
mask = cv2.inRange(hsv, lower_red, upper_red)
# apply mask to original image
res = cv2.bitwise_and(img,img, mask= mask)
#show image
cv2.imshow("Mask1", res)

# Create second mask
lower_red2 = np.array([175,150,50])
upper_red2 = np.array([179,255,255])
# Threshold the HSV image to get only green colors
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
# apply mask to original image
res2 = cv2.bitwise_and(img,img, mask= mask2)
#show image
cv2.imshow("Mask2", res2)

#combine masks
final_mask = cv2.bitwise_or(mask, mask2)
# apply mask to original image
result = cv2.bitwise_and(img,img, mask= final_mask)
#show image
cv2.imshow("Result", result)
cv2.imshow("Image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

Примечание: на изображении с результатами я показываю результаты, если отдельные маски были применены к исходному изображению.Конечно, вам действительно нужны только черные и белые маски.

...