利用openCV+python进行HSV颜色识别,并结合滑动条动态改变目标颜色

HSV颜色空间更容易表示一个特定颜色,通过opencv读取的图片为BGR颜色空间,我们利用cv2.cvtColor()可以轻松实现颜色空间的转变。

 

在函数之前,我们先大致了解一下HSV基本颜色分量范围(通过实验得到的模糊范围,实际操作中我们可以据此做出适当调整)。

图片来自:https://blog.csdn.net/taily_duan/article/details/51506776

 

函数学习

1. cv2.inRange(src, lowerb, upperb)

 

作用:

官方解释就是检查数组元素是否位于另外两个数组的元素之间,简言之就是找出指定范围内的颜色,并返回一个二值图像,指定范围内的图像显示为白色,相反为黑色。(注:cv2.inRange()函数对应的颜色空间为HSV)

 

参数:

  • src:输入图像
  • lowerb:颜色范围下边界(lower boundary)
  • upperb:颜色范围上边界(upper boundary)

 

e.g.


 
 
  1. import cv2
  2. import numpy as np
  3. #载入原图
  4. img_original=cv2.imread( 'E:\ShannonT\\notebook workspace\\images\\qicai.png')
  5. #转变为HSV颜色空间
  6. img_hsv=cv2.cvtColor(img_original,cv2.COLOR_BGR2HSV)
  7. #返回黄色区域的二值图像
  8. img_yellow=cv2.inRange(img_original,( 27, 160, 215),( 83, 255, 255))
  9. cv2.imshow( 'img_original',img_original)
  10. cv2.imshow( 'img_target',img_target)
  11. cv2.waitKey()
  12. cv2.destroyAllWindows()

程序输出如下:

2. cv2.bitwise_and(src1,src2[,mask])

 

作用:

将图像1和图像2进行按位与操作(bitwise:按位)

 

参数:

  • src1:输入图像1
  • src2:输入图像2
  • mask:可选参数,掩模(可以理解为一个窗口,作用为实现指定区域内的图像操作)

 

e.g.


 
 
  1. import cv2
  2. import numpy as np
  3. #载入原图
  4. img_original=cv2.imread( 'E:\ShannonT\\notebook workspace\\images\\qicai.png')
  5. #转变为HSV颜色空间
  6. img_hsv=cv2.cvtColor(img_original,cv2.COLOR_BGR2HSV)
  7. #返回黄色区域的二值图像
  8. img_yellow=cv2.inRange(img_original,( 27, 160, 215),( 83, 255, 255))
  9. ##输入图像与输入图像在掩模条件下按位与,得到掩模范围内的原图像
  10. img_specifiedColor=cv2.bitwise_and(img_original,img_original,mask=img_yellow)
  11. cv2.imshow( 'img_yellow',img_specifiedColor)
  12. cv2.waitKey()
  13. cv2.destroyAllWindows()

程序输出如下:

 

下面通过一个具体的案例实现图像内黄色信息的识别,并加入滑动条的功能,可以让用户更直观地体验HSV颜色空间。


 
 
  1. import cv2
  2. import numpy as np
  3. #定义窗口名称
  4. winName= 'Colors of the rainbow'
  5. #定义滑动条回调函数,此处pass用作占位语句保持程序结构的完整性
  6. def nothing(x):
  7. pass
  8. img_original=cv2.imread( 'E:\ShannonT\\notebook workspace\\images\\qicai.png')
  9. #颜色空间的转换
  10. img_hsv=cv2.cvtColor(img_original,cv2.COLOR_BGR2HSV)
  11. #新建窗口
  12. cv2.namedWindow(winName)
  13. #新建6个滑动条,表示颜色范围的上下边界,这里滑动条的初始化位置即为黄色的颜色范围
  14. cv2.createTrackbar( 'LowerbH',winName, 27, 255,nothing)
  15. cv2.createTrackbar( 'LowerbS',winName, 160, 255,nothing)
  16. cv2.createTrackbar( 'LowerbV',winName, 215, 255,nothing)
  17. cv2.createTrackbar( 'UpperbH',winName, 83, 255,nothing)
  18. cv2.createTrackbar( 'UpperbS',winName, 255, 255,nothing)
  19. cv2.createTrackbar( 'UpperbV',winName, 255, 255,nothing)
  20. while( 1):
  21. #函数cv2.getTrackbarPos()范围当前滑块对应的值
  22. lowerbH=cv2.getTrackbarPos( 'LowerbH',winName)
  23. lowerbS=cv2.getTrackbarPos( 'LowerbS',winName)
  24. lowerbV=cv2.getTrackbarPos( 'LowerbV',winName)
  25. upperbH=cv2.getTrackbarPos( 'UpperbH',winName)
  26. upperbS=cv2.getTrackbarPos( 'UpperbS',winName)
  27. upperbV=cv2.getTrackbarPos( 'UpperbV',winName)
  28. #得到目标颜色的二值图像,用作cv2.bitwise_and()的掩模
  29. img_target=cv2.inRange(img_original,(lowerbH,lowerbS,lowerbV),(upperbH,upperbS,upperbV))
  30. #输入图像与输入图像在掩模条件下按位与,得到掩模范围内的原图像
  31. img_specifiedColor=cv2.bitwise_and(img_original,img_original,mask=img_target)
  32. cv2.imshow(winName,img_specifiedColor)
  33. if cv2.waitKey( 1)==ord( 'q'):
  34. break
  35. cv2.destroyAllWindows()

GIF效果如下:

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值