Abby_Qi 发表于 2020-4-26 22:54:21

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

大家是不是苦于做颜色识别项目时对目标颜色的具体数值范围难以把控?
每次还要查表…有时候查表的颜色也与自己目标颜色对不上?
我,做了个机器视觉颜色阈值编辑器,与大家分享,先看看效果吧:
先输入目标图像位置
http://www.airobotbbs.com/forum.php?mod=image&aid=401&size=300x300&key=6816c8f1b4b88801&nocache=yes&type=fixnone

然后按下Enter
http://www.airobotbbs.com/forum.php?mod=image&aid=402&size=300x300&key=494449b6c5b81966&nocache=yes&type=fixnone
这就是效果图了,上面有HSV色域的取值范围,你可以随便拖直到屏幕只出现你想要的颜色区域。这样就可以把图片里的某一种颜色HSV取值范围记录下来,应用到你的视频颜色识别项目中啦!
当然,如果你想通过LAB色域、GRAY色域、RGB色域等等来选取目标颜色,程序也十分好改,无非就是一个函数,几个变量的问题。

源码如下:
import cv2
import numpy as np

def callback(object):
    pass

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



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


   
    while(True):

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

      H_max = cv2.getTrackbarPos("H_max","image",)
      S_max = cv2.getTrackbarPos("S_max","image",)
      V_max = cv2.getTrackbarPos("V_max","image",)
      
      lower_hsv = np.array()
      upper_hsv = np.array()
      
      mask = cv2.inRange(img,lower_hsv,upper_hsv)

      #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))
      
      cv2.imshow("mask", mask)

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

Choose_Color()



adminbbs 发表于 2020-4-27 08:06:40

做颜色识别吗 ?

adminbbs 发表于 2020-4-27 08:07:58

可以试试 把代码 在GitHub 上上传开源 ,我这也有不错的 一些案例回头来探讨 一番:D

Abby_Qi 发表于 2020-4-27 12:07:28

adminbbs 发表于 2020-4-27 08:06
做颜色识别吗 ?

之前无聊,随便学了学,学的杂,准等上研究生在好好研究
页: [1]
查看完整版本: [Python & OpenCV]为你颜色识别项目做一个阈值选择器吧!