人工智能与机器人技术论坛

 找回密码
 立即注册
查看: 3392|回复: 3
打印 上一主题 下一主题

[Python & OpenCV]为你颜色识别项目做一个阈值选择器吧!

[复制链接]

2

主题

7

帖子

75

积分

注册会员

Rank: 2

积分
75
跳转到指定楼层
楼主
发表于 2020-4-26 22:54:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家是不是苦于做颜色识别项目时对目标颜色的具体数值范围难以把控?
每次还要查表…有时候查表的颜色也与自己目标颜色对不上?
我,做了个机器视觉颜色阈值编辑器,与大家分享,先看看效果吧:
先输入目标图像位置


然后按下Enter

这就是效果图了,上面有HSV色域的取值范围,你可以随便拖直到屏幕只出现你想要的颜色区域。这样就可以把图片里的某一种颜色HSV取值范围记录下来,应用到你的视频颜色识别项目中啦!
当然,如果你想通过LAB色域、GRAY色域、RGB色域等等来选取目标颜色,程序也十分好改,无非就是一个函数,几个变量的问题。

源码如下:
  1. import cv2
  2. import numpy as np

  3. def callback(object):
  4.     pass

  5. #def click(event, x, y, flags, para):
  6. #    if events == cv2.EVENT_LBUTTONDOWN:
  7. #        return 1
  8. #    else:
  9. #        return 0



  10. def Choose_Color():
  11.     filename = input("Please Input Your Image Or Video : \n")
  12.     image0 = cv2.imread(filename,1)
  13.     img = cv2.cvtColor(image0, cv2.COLOR_BGR2HSV)
  14.     #img = image0
  15.     '''
  16.     目标:创建滑动条,把滑动条绑定到opencv窗口
  17.     cv2.createTrackbar()函数,函数的第一个参数时滑动条的名字,第二个参数时滑动条被放置的窗口的名字,第三个参数是滑动条默认值,第四个参数时滑动条的最大值,第五个参数时回调函数,每次滑动都会调用回调函数。
  18.     cv2.getTrackbarPos(),共有2个参数,第一个参数是滑动条名字,第二个时所在窗口偶,返回值是滑动条位置。
  19.     '''
  20.     img = cv2.resize(img,(int(img.shape[1] / 2),int(img.shape[0] / 2)))
  21.    
  22.     cv2.imshow("image",img)
  23.    
  24.     cv2.createTrackbar("H_min","image",50,255,callback)
  25.     cv2.createTrackbar("H_max","image",150,255,callback)
  26.    
  27.     cv2.createTrackbar("S_min","image",0,255,callback)
  28.     cv2.createTrackbar("S_max","image",255,255,callback)
  29.    
  30.     cv2.createTrackbar("V_min","image",0,255,callback)
  31.     cv2.createTrackbar("V_max","image",255,255,callback)


  32.    
  33.     while(True):

  34.         H_min = cv2.getTrackbarPos("H_min","image",)
  35.         S_min = cv2.getTrackbarPos("S_min","image",)
  36.         V_min = cv2.getTrackbarPos("V_min","image",)

  37.         H_max = cv2.getTrackbarPos("H_max","image",)
  38.         S_max = cv2.getTrackbarPos("S_max","image",)
  39.         V_max = cv2.getTrackbarPos("V_max","image",)
  40.         
  41.         lower_hsv = np.array([H_min, S_min, V_min])
  42.         upper_hsv = np.array([H_max, S_max, V_max])
  43.         
  44.         mask = cv2.inRange(img,lower_hsv,upper_hsv)

  45.         #print("H_min = %d,H_max = %d,S_min = %d,S_max = %d,V_min = %d,V_max = %d"%(H_min,H_max,S_min,S_max,V_min,V_max))
  46.         
  47.         cv2.imshow("mask", mask)

  48.         if cv2.waitKey(1) & 0XFF == 27:
  49.             break

  50. Choose_Color()

复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

129

主题

306

帖子

1467

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1467
沙发
发表于 2020-4-27 08:06:40 | 只看该作者
做颜色识别吗 ?
回复 支持 反对

使用道具 举报

129

主题

306

帖子

1467

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1467
板凳
发表于 2020-4-27 08:07:58 | 只看该作者
可以试试 把代码 在GitHub 上上传开源 ,我这也有不错的 一些案例  回头来探讨 一番
回复 支持 反对

使用道具 举报

2

主题

7

帖子

75

积分

注册会员

Rank: 2

积分
75
地板
 楼主| 发表于 2020-4-27 12:07:28 | 只看该作者
adminbbs 发表于 2020-4-27 08:06
做颜色识别吗 ?

之前无聊,随便学了学,学的杂,准等上研究生在好好研究
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|AiRobotNews.com|人工智能与机器人技术论坛  

GMT+8, 2024-5-7 18:48 , Processed in 0.093972 second(s), 5 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表