python中opencv中inrange用法_如何在Python-OpenCV中使用`cv2.inRange`检测两种不同的颜色?...

How can I define "lower" and "upper" range of two different color, such as red and blue (because red and blue are not next to each other in the HSV color)

This one belongs to red:

lower_red = np.array([160,20,70])

upper_red = np.array([190,255,255])

and this one belongs to blue:

lower_blue = np.array([101,50,38])

upper_blue = np.array([110,255,255])

I tried to combine them using if condition or make their own function but not work, can you guys show me the solution?

P/s: OpenCV in Python

解决方案

As you get two masks of colors, then use cv2.bitwise_or to get the final mask.

import cv2

## Read

img = cv2.imread("sunflower.jpg")

## convert to hsv

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

## mask of green (36,0,0) ~ (70, 255,255)

mask1 = cv2.inRange(hsv, (36, 0, 0), (70, 255,255))

## mask o yellow (15,0,0) ~ (36, 255, 255)

mask2 = cv2.inRange(hsv, (15,0,0), (36, 255, 255))

## final mask and masked

mask = cv2.bitwise_or(mask1, mask2)

target = cv2.bitwise_and(img,img, mask=mask)

cv2.imwrite("target.png", target)

Source:

Find green and yellow(the range is not that accurate):

BTW, to get more accurate range, here is a refer map in my related answer:

你可能感兴趣的:(python中opencv中inrange用法_如何在Python-OpenCV中使用`cv2.inRange`检测两种不同的颜色?...)