Python OpenCV 轮廓分析(Contour Analysis)详解与实战

发布时间:2026/7/16 18:03:56
Python OpenCV 轮廓分析(Contour Analysis)详解与实战 1. 什么是轮廓Contour轮廓Contour是图像中目标的边界点集合。通常先经过灰度化、二值化再利用findContours()提取。典型流程原图 → 灰度 → 二值化 → findContours → 轮廓分析工业视觉中常用于元件定位Connector 外形检测OCR 字符区域提取缺件检测尺寸测量2. findContours() 详解函数原型contours,hierarchycv2.findContours(image,mode,method)参数说明image必须是二值图。graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)_,binarycv2.threshold(gray,0,255,cv2.THRESH_BINARYcv2.THRESH_OTSU)mode检索模式RETR_EXTERNAL仅外轮廓工业视觉最常用RETR_LIST所有轮廓不保存层级RETR_CCOMP两层层级RETR_TREE完整树结构method近似方式CHAIN_APPROX_NONE保存所有点CHAIN_APPROX_SIMPLE仅保存关键点推荐完整示例importcv2 imgcv2.imread(test.png)graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)_,binarycv2.threshold(gray,0,255,cv2.THRESH_BINARYcv2.THRESH_OTSU)contours,hierarchycv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)drawimg.copy()cv2.drawContours(draw,contours,-1,(0,255,0),2)cv2.imshow(Contours,draw)cv2.waitKey(0)3. 轮廓几何特征分析面积areacv2.contourArea(cnt)作用过滤噪声判断目标大小周长lengthcv2.arcLength(cnt,True)作用多边形逼近圆度计算外接矩形x,y,w,hcv2.boundingRect(cnt)作用ROI 提取OCR 定位最小外接矩形rectcv2.minAreaRect(cnt)boxcv2.boxPoints(rect)适用于旋转目标。重心Mcv2.moments(cnt)cxint(M[m10]/M[m00])cyint(M[m01]/M[m00])用于目标定位和运动控制。4. Moments 与 Hu 不变矩图像矩用于描述目标形状。Mcv2.moments(cnt)hucv2.HuMoments(M)print(hu)Hu 不变矩特点平移不变缩放不变基本旋转不变适用于形状识别、Logo 检测。5. approxPolyDP 多边形逼近epsilon0.02*cv2.arcLength(cnt,True)approxcv2.approxPolyDP(cnt,epsilon,True)应用三角形检测矩形检测元件识别6. Convex Hull 与 Convexity Defects凸包hullcv2.convexHull(cnt)作用获取最小凸包外形分析凸缺陷idxcv2.convexHull(cnt,returnPointsFalse)defectscv2.convexityDefects(cnt,idx)作用Connector 防呆槽检测缺口检测手势识别7. matchShapes()scorecv2.matchShapes(cnt1,cnt2,cv2.CONTOURS_MATCH_I1,0)返回值越小越相似。应用Connector 插反检测极性检测Logo 比对8. 综合案例forcntincontours:areacv2.contourArea(cnt)ifarea300:continuex,y,w,hcv2.boundingRect(cnt)cv2.rectangle(img,(x,y),(xw,yh),(0,255,0),2)cv2.putText(img,fArea:{area:.1f},(x,y-5),cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,0,255),2)总结API用途findContours提取轮廓contourArea面积arcLength周长moments几何矩HuMoments形状描述approxPolyDP多边形逼近convexHull凸包convexityDefects凸缺陷matchShapes轮廓匹配