快捷搜索:  汽车  科技

opencv识别形状和颜色:42.基于OpenCV的颜色检测识别

opencv识别形状和颜色:42.基于OpenCV的颜色检测识别import numpy as np import cv2 font= cv2.FONT_HERSHEY_SIMPLEX #把颜色保存一个字典里。 def getColorList(): color_dict = {} # 黑色 lower_black = np.array([0 0 0]) upper_black = np.array([180 255 46]) color_list = [] color_list.append(lower_black) color_list.append(upper_black) color_dict['black'] = color_list #灰色 lower_gray = np.array([0 0 46]) upper_gr

一般情况下,都是用RGB来表示颜色,但是如果要进行颜色识别和检测,则需要使用HSV颜色空间。

HSV(Hue Saturation Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间 也称六角锥体模型(Hexcone Model)。这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。

RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。

opencv识别形状和颜色:42.基于OpenCV的颜色检测识别(1)

HSV色彩空间

opencv识别形状和颜色:42.基于OpenCV的颜色检测识别(2)

HSV颜色空间

opencv识别形状和颜色:42.基于OpenCV的颜色检测识别(3)

HSV 颜色对照表

根据HSV颜色对照表,把各种颜色分量保存在一个字典里,下面以检测识别红色1为例:

import numpy as np import cv2 font= cv2.FONT_HERSHEY_SIMPLEX #把颜色保存一个字典里。 def getColorList(): color_dict = {} # 黑色 lower_black = np.array([0 0 0]) upper_black = np.array([180 255 46]) color_list = [] color_list.append(lower_black) color_list.append(upper_black) color_dict['black'] = color_list #灰色 lower_gray = np.array([0 0 46]) upper_gray = np.array([180 43 220]) color_list = [] color_list.append(lower_gray) color_list.append(upper_gray) color_dict['gray']=color_list # 白色 lower_white = np.array([0 0 221]) upper_white = np.array([180 30 255]) color_list = [] color_list.append(lower_white) color_list.append(upper_white) color_dict['white'] = color_list #红色 lower_red = np.array([156 43 46]) upper_red = np.array([180 255 255]) color_list = [] color_list.append(lower_red) color_list.append(upper_red) color_dict['red1']=color_list # 红色2 lower_red = np.array([0 43 46]) upper_red = np.array([10 255 255]) color_list = [] color_list.append(lower_red) color_list.append(upper_red) color_dict['red2'] = color_list #橙色 lower_orange = np.array([11 43 46]) upper_orange = np.array([25 255 255]) color_list = [] color_list.append(lower_orange) color_list.append(upper_orange) color_dict['orange'] = color_list #黄色 lower_yellow = np.array([26 43 46]) upper_yellow = np.array([34 255 255]) color_list = [] color_list.append(lower_yellow) color_list.append(upper_yellow) color_dict['yellow'] = color_list #绿色 lower_green = np.array([35 43 46]) upper_green = np.array([77 255 255]) color_list = [] color_list.append(lower_green) color_list.append(upper_green) color_dict['green'] = color_list #青色 lower_cyan = np.array([78 43 46]) upper_cyan = np.array([99 255 255]) color_list = [] color_list.append(lower_cyan) color_list.append(upper_cyan) color_dict['cyan'] = color_list #蓝色 lower_blue = np.array([100 43 46]) upper_blue = np.array([124 255 255]) color_list = [] color_list.append(lower_blue) color_list.append(upper_blue) color_dict['blue'] = color_list # 紫色 lower_purple = np.array([125 43 46]) upper_purple = np.array([155 255 255]) color_list = [] color_list.append(lower_purple) color_list.append(upper_purple) color_dict['purple'] = color_list return color_dict #取红色1HSV上下分量值 color_dict=getColorList() lower_red=color_dict["red1"][0] higher_red=color_dict["red1"][1] #识别和检测红色1 cap=cv2.VideoCapture(0)#打开电脑内置摄像头 if(cap.isOpened()): while(True): ret frame=cap.read()#读取帧 img_hsv=cv2.cvtColor(frame cv2.COLOR_BGR2HSV) mask_red=cv2.inRange(img_hsv lower_red higher_red)#获得红色1的掩膜 mask_red = cv2.medianBlur(mask_red 7) # 中值滤波,去噪 #只检测外轮廓信息,并存储所有边界点 contours hierarchy=cv2.findContours(mask_red cv2.RETR_EXTERNAL cv2.CHAIN_APPROX_NONE)#轮廓检测 for cnt in contours: (x y w h)=cv2.boundingRect(cnt)#该函数返回矩阵四个点 cv2.rectangle(frame (x y) (x w y h) (0 0 255) 2)#将检测到的颜色框起来 cv2.putText(frame 'red' (x y-5) font 0.7 (0 0 255) 2) cv2.imshow('frame' frame) k=cv2.waitKey(20)&0xFF if k ==27: break cv2.waitKey(0) cv2.destroyAllWindows()

opencv识别形状和颜色:42.基于OpenCV的颜色检测识别(4)

识别检测到红色苹果

猜您喜欢: