RGB
不是用于特定颜色检测的良好颜色空间。HSV
将是一个不错的选择。
对于 RED,您可以选择 HSV 范围(0,50,20) ~ (5,255,255)
and (175,50,20)~(180,255,255)
使用以下颜色图。当然,RED range
不是那么精确,但也还可以。
代码取自我的另一个答案:检测像素是否为红色 https://stackoverflow.com/questions/51225657/detect-whether-a-pixel-is-red-or-not/51228567#51228567
#!/usr/bin/python3
# 2018.07.08 10:39:15 CST
# 2018.07.08 11:09:44 CST
import cv2
import numpy as np
## Read and merge
img = cv2.imread("ColorChecker.png")
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
## Gen lower mask (0-5) and upper mask (175-180) of RED
mask1 = cv2.inRange(img_hsv, (0,50,20), (5,255,255))
mask2 = cv2.inRange(img_hsv, (175,50,20), (180,255,255))
## Merge the mask and crop the red regions
mask = cv2.bitwise_or(mask1, mask2 )
croped = cv2.bitwise_and(img, img, mask=mask)
## Display
cv2.imshow("mask", mask)
cv2.imshow("croped", croped)
cv2.waitKey()
相关回答:
- 使用“cv::inRange”(OpenCV) 选择正确的 HSV 上下边界进行颜色检测 https://stackoverflow.com/questions/10948589/choosing-the-correct-upper-and-lower-hsv-boundaries-for-color-detection-withcv/48367205#48367205
- 如何定义阈值以仅检测图像中的绿色对象:Opencv https://stackoverflow.com/questions/47483951/how-to-define-a-threshold-value-to-detect-only-green-colour-objects-in-an-image/47483966#47483966
- 如何在Python-OpenCV中使用“cv2.inRange”检测两种不同的颜色? https://stackoverflow.com/questions/48109650/how-to-detect-two-different-colors-using-cv2-inrange-in-python-opencv/48117624#48117624
- 检测像素是否为红色 https://stackoverflow.com/questions/51225657/detect-whether-a-pixel-is-red-or-not/51228567#51228567
当然,对于具体问题,也许其他色彩空间也可以。
如何用opencv读取电表指针? https://stackoverflow.com/questions/46513323/how-to-read-utility-meter-needle-with-opencv/46514317#46514317