本文实例为大家分享了python利用opencv实现颜色检测的具体代码,供大家参考,具体内容如下
需要实现倒车辅助标记检测的功能,倒车辅助标记颜色已经确定了,所以不需要使用深度学习的方法,那样成本太高了,直接可以使用颜色检测的方法。
1.首先需要确定待检测目标的hsv值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import cv2 img = cv2.imread( 'l3.png' ) gray = cv2.cvtcolor(img, cv2.color_bgr2gray) hsv = cv2.cvtcolor(img, cv2.color_bgr2hsv) def mouse_click(event, x, y, flags, para): if event = = cv2.event_lbuttondown: # 左边鼠标点击 print ( 'pix:' , x, y) print ( "bgr:" , img[y, x]) print ( "gray:" , gray[y, x]) print ( "hsv:" , hsv[y, x]) if __name__ = = '__main__' : cv2.namedwindow( "img" ) cv2.setmousecallback( "img" , mouse_click) while true: cv2.imshow( 'img' , img) if cv2.waitkey() = = ord ( 'q' ): break cv2.destroyallwindows() |
2.然后利用颜色检测,检测出指定目标
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import numpy as np import cv2 font = cv2.font_hershey_simplex lower_red = np.array([ 0 , 127 , 128 ]) # 红色阈值下界 higher_red = np.array([ 10 , 255 , 255 ]) # 红色阈值上界 lower_yellow = np.array([ 15 , 230 , 230 ]) # 黄色阈值下界 higher_yellow = np.array([ 35 , 255 , 255 ]) # 黄色阈值上界 lower_blue = np.array([ 85 , 240 , 140 ]) higher_blue = np.array([ 100 , 255 , 165 ]) frame = cv2.imread( "l3.png" ) img_hsv = cv2.cvtcolor(frame, cv2.color_bgr2hsv) mask_red = cv2.inrange(img_hsv, lower_red, higher_red) # 可以认为是过滤出红色部分,获得红色的掩膜 mask_yellow = cv2.inrange(img_hsv, lower_yellow, higher_yellow) # 获得绿色部分掩膜 mask_yellow = cv2.medianblur(mask_yellow, 7 ) # 中值滤波 mask_red = cv2.medianblur(mask_red, 7 ) # 中值滤波 mask_blue = cv2.inrange(img_hsv, lower_blue, higher_blue) # 获得绿色部分掩膜 mask_blue = cv2.medianblur(mask_blue, 7 ) # 中值滤波 #mask = cv2.bitwise_or(mask_green, mask_red) # 三部分掩膜进行按位或运算 print (mask_red) cnts1, hierarchy1 = cv2.findcontours(mask_red, cv2.retr_external, cv2.chain_approx_none) # 轮廓检测 #红色 cnts2, hierarchy2 = cv2.findcontours(mask_blue, cv2.retr_external, cv2.chain_approx_none) # 轮廓检测 #红色 cnts3, hierarchy3 = cv2.findcontours(mask_yellow, cv2.retr_external, cv2.chain_approx_none) for cnt in cnts1: (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 ) for cnt in cnts2: (x, y, w, h) = cv2.boundingrect(cnt) # 该函数返回矩阵四个点 cv2.rectangle(frame, (x, y), (x + w, y + h), ( 0 , 0 , 255 ), 2 ) # 将检测到的颜色框起来 cv2.puttext(frame, 'blue' , (x, y - 5 ), font, 0.7 , ( 0 , 0 , 255 ), 2 ) for cnt in cnts3: (x, y, w, h) = cv2.boundingrect(cnt) # 该函数返回矩阵四个点 cv2.rectangle(frame, (x, y), (x + w, y + h), ( 0 , 255 , 0 ), 2 ) # 将检测到的颜色框起来 cv2.puttext(frame, 'yellow' , (x, y - 5 ), font, 0.7 , ( 0 , 255 , 0 ), 2 ) cv2.imshow( 'frame' , frame) cv2.waitkey( 0 ) cv2.destroyallwindows() |
3.效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/sinat_38387807/article/details/107512125