当前位置:   article > 正文

Opencv小应用(一)——实现类似OpenMv中颜色识别的调节阈值的功能_opencv怎么调颜色阈值

opencv怎么调颜色阈值

Opencv小应用(一)——实现类似OpenMv中颜色识别的调节阈值的功能


前言

在实现颜色识别的时候,图形经常是转换成HSV格式的,因为HSV格式相较于RGB来说,阈值的设置等有更优的效果,且如果要识别颜色,使用RGB需要调节三个参数,比较麻烦,且效果受光线等影响较大,故都采用HSV格式来进行颜色识别,但颜色识别中,往往需要调节阈值,本文就将利用opencv实现调节阈值的功能。

一、OpenMv中的颜色识别功能

用过OpenMv的都知道,Openmv中的颜色识别,寻找色块功能十分的方便,且强大,里面有一个十分方便调节阈值的功能,如下。

 而Opencv中轨迹栏,cv.getTrackbarPoscv.createTrackbar即可实现此功能

二、Opencv代码

其实整体实现思路是十分简单的

要做颜色识别,就是设定一两个阈值,将转换为HSV格式的图使用cv.inRange来做三通道的mask,最后将这个mask和原图做与操作即可。

而我们要实现的就是把cv.inRange里面的参数,换成轨迹栏的参数即,我把整个代码封装成一个类方便使用了。

  1. import cv2 as cv
  2. import numpy as np
  3. # 需要输入图像,和对应需要寻找的颜色的阈值
  4. class Trace_Colors:
  5. def __init__(self, image, lparam=None, hparam=None):
  6. self.image =image
  7. self.lparam = lparam
  8. self.hparam = hparam
  9. def nothing(self, x):
  10. pass
  11. # 当用find_threshold调整好阈值,输入阈值后使用
  12. def find(self):
  13. hsv_img = cv.cvtColor(self.image, cv.COLOR_BGR2HSV) # 转换位HSV格式
  14. mask = cv.inRange(hsv_img, self.lparam, self.hparam)
  15. res = cv.bitwise_and(self.image, self.image, mask=mask)
  16. return res
  17. # 调整阈值
  18. def find_threshold(self):
  19. # 创建轨迹栏
  20. cv.namedWindow('Tracking')
  21. cv.createTrackbar('LH', 'Tracking', 0, 255, self.nothing)
  22. cv.createTrackbar('UH', 'Tracking', 255, 255, self.nothing)
  23. cv.createTrackbar('LS', 'Tracking', 0, 255, self.nothing)
  24. cv.createTrackbar('US', 'Tracking', 255, 255, self.nothing)
  25. cv.createTrackbar('LV', 'Tracking', 0, 255, self.nothing)
  26. cv.createTrackbar('UV', 'Tracking', 255, 255, self.nothing)
  27. while True:
  28. # 轨迹栏参数定义
  29. lh = cv.getTrackbarPos('LH', 'Tracking')
  30. uh = cv.getTrackbarPos('UH', 'Tracking')
  31. ls = cv.getTrackbarPos('LS', 'Tracking')
  32. us = cv.getTrackbarPos('US', 'Tracking')
  33. lv = cv.getTrackbarPos('LV', 'Tracking')
  34. uv = cv.getTrackbarPos('UV', 'Tracking')
  35. lower_param = np.array([lh, ls, lv])
  36. upper_param = np.array([uh, us, uv])
  37. hsv_img = cv.cvtColor(self.image, cv.COLOR_BGR2HSV) # 转换位HSV格式
  38. mask = cv.inRange(hsv_img, lower_param, upper_param) # 创建mask
  39. res = cv.bitwise_and(self.image, self.image, mask=mask)
  40. cv.imshow('res', res)
  41. if cv.waitKey(1) == 27 or cv.waitKey(1) == ord('q'):
  42. cv.destroyAllWindows()
  43. break
  44. image = cv.imread('Image/colorballs.png')
  45. trace = Trace_Colors(image)
  46. trace.find_threshold()

 整体效果如下,我们就可以通过这个界面,找到自己需要的阈值,然后记录下来,进行下一步的识别。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/920238
推荐阅读
相关标签
  

闽ICP备14008679号