直接上代码,大家直接复制运行就可以看到效果
前提是安装好了OpenCV3
一开始我的代码没有注解 我花了点时间在后面加了一个有注解的代码
如果需要了解代码的功能
可以划到下面看看
import numpy as np import cv2 blue_lower = np.array([100,43,46]) blue_upper = np.array([124,255,255]) #这里是设置颜色 cap = cv2.VideoCapture(0) cap.set(3, 320) cap.set(4, 240) while 1: ret, frame = cap.read() frame = cv2.GaussianBlur(frame, (5, 5), 0) hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv, blue_lower, blue_upper) # 图像学膨胀腐蚀 mask = cv2.erode(mask, None, iterations=2) mask = cv2.GaussianBlur(mask, (3, 3), 0) res = cv2.bitwise_and(frame, frame, mask=mask) # 寻找轮廓并绘制轮廓 cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] if len(cnts) > 0: # 寻找面积最大的轮廓并画出其最小外接圆 cnt = max(cnts, key=cv2.contourArea) (x, y), radius = cv2.minEnclosingCircle(cnt) cv2.circle(frame, (int(x), int(y)), int(radius), (255, 0, 255), 2) # 找到物体的位置坐标,获得颜色物体的位置,可以来控制小车的转向 print(int(x), int(y)) else: pass cv2.imshow('frame', frame) cv2.imshow('mask', mask) cv2.imshow('res', res) if cv2.waitKey(5) & 0xFF == 27: break cap.release() cv2.destroyAllWindows()
1234567891011121314151617181920212223242526272829303132333435363738394041需要追踪的颜色是HSV的样式具体颜色表格如下
可以根据自己的需求来设置需要的颜色
可以参照我写的代码来设置颜色的参数
追踪效果图如下,我设置的是蓝色追踪。
这样就可以实现在树莓派上实现颜色的识别与最终,可以与小车结合来控制小车的一些运动与暂停的交互。比如红灯停,绿灯行。
import cv2 import numpy as np #导入库 blue_lower = np.array([100,43,46]) blue_upper = np.array([124,255,255]) #设置颜色区间 cap = cv2.VideoCapture(0) #打开摄像头 cap.set(3,640) cap.set(4,480) #设置窗口的大小 while 1: #进入无线循环 ret,frame = cap.read() #将摄像头拍摄到的画面作为frame的值 frame = cv2.GaussianBlur(frame,(5,5),0) #高斯滤波GaussianBlur() 让图片模糊 hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) #将图片的色域转换为HSV的样式 以便检测 mask = cv2.inRange(hsv,blue_lower,blue_upper) #设置阈值,去除背景 保留所设置的颜色 mask = cv2.erode(mask,None,iterations=2) #显示腐蚀后的图像 mask = cv2.GaussianBlur(mask,(3,3),0) #高斯模糊 res = cv2.bitwise_and(frame,frame,mask=mask) #图像合并 cnts = cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2] #边缘检测 if len(cnts) >0 : #通过边缘检测来确定所识别物体的位置信息得到相对坐标 cnt = max(cnts,key=cv2.contourArea) (x,y),radius = cv2.minEnclosingCircle(cnt) cv2.circle(frame,(int(x),int(y)),int(radius),(255,0,255),2) #画出一个圆 print(int(x),int(y)) else: pass cv2.imshow('frame',frame) #将具体的测试效果显示出来 cv2.imshow('mask',mask) cv2.imshow('res',res) if cv2.waitKey(5) & 0xFF == 27: #如果按了ESC就退出 当然也可以自己设置 break cap.release() cv2.destroyAllWindows() #后面两句是常规操作,每次使用摄像头都需要这样设置一波
12345678910111213141516171819202122232425262728293031323334对于打印出来的坐标,是以窗口的左上角为原点,向下为y轴正半轴,向右为x轴正半轴
相关知识
树莓派智能花卉浇灌系统设计与实现
python 手写字识别
利用OpenCV根据图片识别环境的亮度
用树莓派制作一款自动浇灌系统
闲置树莓派:种朵花然后做延时摄影吧
深入浅出:利用OpenCV实现手写数字识别之旅
树莓派实现自动浇花程序
opencv深度学习昆虫识别系统图像识别 python
基于Python和Arduino的智能花盆系统
高效农作物病虫害识别:Python项目源码及数据集教程
网址: 树莓派配合python opencv 实现的颜色追踪与识别 https://m.huajiangbk.com/newsview1094009.html
上一篇: openMV |
下一篇: python 识别某个颜色的文字 |