目前计算机视觉(CV)、自然语言处理(NLP)和语音识别并列为三人工智能的热点,而计算机视觉在物体检测中的应用非常广泛,比如自动驾驶、视频监控、工业质检、医疗诊断等场景。目标检测的根本任务是提取图片或视频中感兴趣的目标。目标识别可以基于颜色、纹理和形状。其中,color属性应用广泛,实现起来也比较容易。分享一个我做过的小实验——通过OpenCV的Python接口实现视频的颜色识别和跟踪。下面是我们完整的代码实现(调试运行):importnumpyasnpimportcv2font=cv2.FONT_HERSHEY_SIMPLEXlower_green=np.array([35,110,106])#Greenrangelowthresholdupper_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=1else:flag=0num=0if(flag):while(True):ret,frame=cap.read()#读取一帧ifret==False:#读取帧中断失败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,w,h,=cv2.boundingRect(复制代码cnt)cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,255),2)cv2.putText(frame,"绿色",(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+1cv2.imshow("dection",frame)cv2.imwrite("imgs/%d.jpg"%num,frame)ifcv2.waitKey(20)&0xFF==27:breakcv2.waitKey(0)cv2.destroyAllWindows()如图所示,我们检测红色区域的最终渲染:本文由博文发布平台OpenWrite发布!
