OpenCV入门
掩码 图像分割imgcv2.imread(test.png)masknp.zeros(img.shape,dtypenp.uint8)cv2.circle(mask,(200,300),#圆心坐标150,#半径(255,255,255),#填充的颜色-1)#线条大小 -1 代表实心seg_imgcv2.bitwise_and(img,#原图mask#掩码图像)cv2.imshow(seg,seg_img)cv2.waitKey()原图分割后的效果图颜色检测importcv2importnumpyasnpdefMoveTrackbarProc(pos):print(pos)imgcv2.imread(33.png)#转换为RGB模式转换为HSV模式 HSV模式更容易实现颜色的过滤hsvimgcv2.cvtColor(img,cv2.COLOR_BGR2HSV)windownametrawindowcv2.namedWindow(windowname)cv2.resizeWindow(windowname,300,300)cv2.createTrackbar(h_min,#创建的滑动条名字windowname,0,# 色调最小值179,#Hue 色调的最大值179MoveTrackbarProc)#滑动条所属窗口cv2.createTrackbar(h_max,windowname,179,179,MoveTrackbarProc)#饱和度cv2.createTrackbar(sat_min,windowname,0,255,MoveTrackbarProc)cv2.createTrackbar(sat_max,windowname,255,255,MoveTrackbarProc)#亮度cv2.createTrackbar(val_min,windowname,0,255,MoveTrackbarProc)cv2.createTrackbar(val_max,windowname,255,255,MoveTrackbarProc)whileTrue:h_mincv2.getTrackbarPos(h_min,windowname)h_maxcv2.getTrackbarPos(h_max,windowname)sat_mincv2.getTrackbarPos(sat_min,windowname)sat_maxcv2.getTrackbarPos(sat_max,windowname)val_mincv2.getTrackbarPos(val_min,windowname)val_maxcv2.getTrackbarPos(val_max,windowname)#对颜色进行过滤 颜色值在设置的范围内 值设置白色 没有在范围内的设置为黑色 得到一个掩码图像maskcv2.inRange(hsvimg,#过滤的图像np.array([h_min,sat_min,val_min]),np.array([h_max,sat_max,val_max]))seg_imgcv2.bitwise_and(img,img,maskmask)cv2.imshow(mask,mask)cv2.imshow(set_img,seg_img)cv2.imshow(img,img)cv2.waitKey(20)轮廓检测importcv2importnumpyasnp imgcv2.imread(txjc.png)#彩色图像转换为灰度图像 轮廓识别的时候不需要彩色 减少数据运算量graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#边缘检测 threshold1低阈值→ 控制灵敏度# 值越小 → 检测到越多边缘包括噪点# 值越大 → 只保留明显的边缘# threshold2高阈值→ 控制筛选强度# 值越小 → 保留更多弱边缘# 值越大 → 只保留强边缘cannycv2.Canny(gray,100,200)#轮廓检测 返回值1 检测到的轮廓 返回值2 轮廓的层级Contours,_cv2.findContours(canny,cv2.RETR_EXTERNAL,#返回最外面的边框cv2.CHAIN_APPROX_NONE#保存返回的所有轮廓点)forcontourinContours:cv2.drawContours(img,contour,-1,#轮廓id -1代表这个图形所有的轮廓(100,100,100),#轮廓颜色4#线条宽度)#图形面积areacv2.contourArea(contour)#周长 参数2 图形是否闭合arclencv2.arcLength(contour,True)#坐标x,y,w,hcv2.boundingRect(contour)cv2.rectangle(img,(x,y),(xw,yh),(0,255,0),2)#顶点坐标pointscv2.approxPolyDP(contour,arclen*0.03,True)iflen(points)3:cv2.putText(img,sanjiaoxing,(x,y-10),cv2.FONT_HERSHEY_PLAIN,1,(0,255,0),2)eliflen(points)4:cv2.putText(img,sibianxing,(x,y-10),cv2.FONT_HERSHEY_PLAIN,1,(0,180,0),2)eliflen(points)5:cv2.putText(img,wubianxing,(x,y-10),cv2.FONT_HERSHEY_PLAIN,1,(0,120,0),2)else:cv2.putText(img,duobianxing,(x,y-10),cv2.FONT_HERSHEY_PLAIN,1,(100,120,0),2)print(len(Contours))cv2.imshow(canny,canny)cv2.imshow(img,img)cv2.waitKey(0)目标跟踪importcv2importnumpyasnp capcv2.VideoCapture(resource/person_1.mp4)#创建跟踪器trackercv2.TrackerCSRT_create()flagFalsewhileTrue:ret,framecap.read()ifnotret:breakcodecv2.waitKey(25)ifcodeord(a):#选择跟踪目标roicv2.selectROI(track,frame,showCrosshairFalse)#初始化跟踪目标tracker.init(frame,roi)flagTrueifflag:#更新这一帧画面success,boxtracker.update(frame)ifsuccess:x,y,w,hbox cv2.rectangle(frame,(x,y),(xw,yh),(0,255,0),2)cv2.imshow(track,frame)cap.release()cv2.destroyAllWindows()车流统计importcv2importnumpyasnp#背景解除器subtractcv2.bgsegm.createBackgroundSubtractorMOG()capcv2.VideoCapture(resource/car.mp4)whilecap.isOpened():ret,framecap.read()ifnotret:break#画分割线cv2.line(frame,(0,500),(1280,500),(0,0,255),2)#转换成灰度图像graycv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#高斯模糊 清除图像上的噪点 排除干扰clearimgcv2.GaussianBlur(gray,(5,5),0)#移动的车是前景 马路和静止的山是背景 先去除掉背景#得到移动的车图像masksubtract.apply(clearimg)kernelnp.ones((5,5),np.uint8)#膨胀 增强特征newmaskcv2.dilate(mask,kernel,iterations2)#查找轮廓controus,_cv2.findContours(newmask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)forcincontrous:#去除面积小的噪点ifcv2.contourArea(c)800:continuex,y,w,hcv2.boundingRect(c)cv2.rectangle(frame,(x,y),(xw,yh),(0,255,0),2)cv2.imshow(frame,frame)cv2.waitKey(25)cap.release()cv2.destroyAllWindows()验证码使用滤波去除干扰img_colorcv2.imread(yzm.png,cv2.IMREAD_GRAYSCALE)#设置阈值t,img_tcv2.threshold(img_color,150,255,cv2.THRESH_BINARY)cv2.imshow(img,img_t)#处理杂色 去除图片上小的图块median_imgcv2.medianBlur(img_t,7)cv2.imshow(median_img,median_img)cv2.waitKey(0)暴力匹配imgcv2.imread(res/small_map_player.png)img_templatecv2.imread(1.png)#SIFT特征检测 ORB 有两种检测模式siftcv2.SIFT.create()keypoints,descriptorssift.detectAndCompute(img,None)keypoints_tem,descriptors_temsift.detectAndCompute(img_template,None)#创建暴力匹配器bfcv2.BFMatcher()#knn检测matchsbf.knnMatch(descriptors,descriptors_tem,k2)#筛选更好的位置good_match[]form,ninmatchs:ifm.distancen.distance*0.8:good_match.append(m)match_outcv2.drawMatches(img,keypoints,img_template,keypoints_tem,good_match,None)cv2.imshow(matchout,match_out)cv2.waitKey(0)