为了账号安全,请及时绑定邮箱和手机立即绑定

使用`cv:inRang‘(OpenCV)选择正确的上、下HSV边界进行颜色检测

使用`cv:inRang‘(OpenCV)选择正确的上、下HSV边界进行颜色检测

catspeake 2019-07-11 20:25:15
使用`cv:inRang‘(OpenCV)选择正确的上、下HSV边界进行颜色检测我有一张咖啡罐的图片,上面有一个橙色的盖子,我想找到这个位置。在这里.gcolor 2实用程序显示位于盖子中心的HSV为(22,59,100)。问题是如何选择颜色的界限?我试过min=(18,40,90)和max=(27,255,255),但结果出乎意料。下面是Python代码:import cv in_image = 'kaffee.png' out_image = 'kaffee_out.png' out_image_thr = 'kaffee_thr.png' ORANGE_MIN = cv.Scalar(18, 40, 90) ORANGE_MAX = cv.Scalar(27, 255, 255) COLOR_MIN = ORANGE_MIN COLOR_MAX = ORANGE_MAX def test1():     frame = cv.LoadImage(in_image)     frameHSV = cv.CreateImage(cv.GetSize(frame), 8, 3)     cv.CvtColor(frame, frameHSV, cv.CV_RGB2HSV)     frame_threshed = cv.CreateImage(cv.GetSize(frameHSV), 8, 1)     cv.InRangeS(frameHSV, COLOR_MIN, COLOR_MAX, frame_threshed)     cv.SaveImage(out_image_thr, frame_threshed) if __name__ == '__main__':     test1()
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

好的,找到颜色HSV空间是一个古老而又普遍的问题。我做了一个hsv-colormap快速查找特殊颜色。下面是:

x轴表示Hue在[0,180]中,y-axis 1表示Saturation在[0,255]中,y-axis 2表示S = 255,同时保持V = 255.

要找到颜色,通常只需查找HS,并在范围内设置v(20,255)。

为了找到橙色的颜色,我们查找地图,并找到最佳范围:H :[10, 25], S: [100, 255], and V: [20, 255]..所以面具是cv2.inRange(hsv,(10, 100, 20), (25, 255, 255) )

然后我们使用找到的范围来寻找橙色的颜色,这就是结果:


该方法简单但常用:

#!/usr/bin/python3
# 2018.01.21 20:46:41 CST
import cv2

img = cv2.imread("test.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv,(10, 100, 20), (25, 255, 255) )
cv2.imshow("orange", mask);cv2.waitKey();cv2.destroyAllWindows()

类似的答案:

  1. 如何定义阈值以检测图像中的绿色对象:OpenCV

  2. 用InRangeS选择OpenCV阈值的HSV值


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 2164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信