50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
目前计算机视觉(CV)与自然语言处理(NLP)及语音识别并列为人工智能三大热点方向,而计算机视觉中的对象检测(objectdetection)应用非常广泛,比如自动驾驶、视频监控、工业质检、医疗诊断等场景。
目标检测的根本任务就是将图片或者视频中感兴趣的目标提取出来,目标的识别可以基于颜色、纹理、形状。其中颜色属性运用十分广泛,也比较容易实现。下面就向大家分享一个我做的小实验———通过OpenCV的Python接口来实现从视频中进行颜色识别和跟踪。
下面就是我们完整的代码实现(已调试运行):
importnumpyasnp importcv2 font=cv2.FONT_HERSHEY_SIMPLEX lower_green=np.array([35,110,106])#绿色范围低阈值 upper_green=np.array([77,255,255])#绿色范围高阈值 lower_red=np.array([0,127,128])#红色范围低阈值 upper_red=np.array([10,255,255])#红色范围高阈值 #需要更多颜色,可以去百度一下HSV阈值! #cap=cv2.VideoCapture('1.mp4')#打开视频文件 cap=cv2.VideoCapture(0)#打开USB摄像头 if(cap.isOpened()):#视频打开成功 flag=1 else: flag=0 num=0 if(flag): while(True): ret,frame=cap.read()#读取一帧 ifret==False:#读取帧失败 break hsv_img=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) mask_green=cv2.inRange(hsv_img,lower_green,upper_green)#根据颜色范围删选 mask_red=cv2.inRange(hsv_img,lower_red,upper_red) #根据颜色范围删选 mask_green=cv2.medianBlur(mask_green,7)#中值滤波 mask_red=cv2.medianBlur(mask_red,7)#中值滤波 mask=cv2.bitwise_or(mask_green,mask_red) mask_green,contours,hierarchy=cv2.findContours(mask_green,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) mask_red,contours2,hierarchy2=cv2.findContours(mask_red,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) forcntincontours: (x,y,w,h)=cv2.boundingRect(cnt) cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,255),2) cv2.putText(frame,"Green",(x,y-5),font,0.7,(0,255,0),2) forcnt2incontours2: (x2,y2,w2,h2)=cv2.boundingRect(cnt2) cv2.rectangle(frame,(x2,y2),(x2+w2,y2+h2),(0,255,255),2) cv2.putText(frame,"Red",(x2,y2-5),font,0.7,(0,0,255),2) num=num+1 cv2.imshow("dection",frame) cv2.imwrite("imgs/%d.jpg"%num,frame) ifcv2.waitKey(20)&0xFF==27: break cv2.waitKey(0) cv2.destroyAllWindows()
如图所示,我们将会检测到红色区域
最终的效果图:
总结
以上所述是小编给大家介绍的50行Python代码实现视频中物体颜色识别和跟踪,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。