图像轮廓检测方法
1 #图像轮廓 2 #先将灰度图像二值化 这样轮廓更加清晰 3 ret,thresh = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY) 4 #cv2.findContours(src,mode,method) 5 #mode:轮廓检索模式 6 #RETR_EXTERNAL:只检索最外面的轮廓; 7 #RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中; 8 #RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界; 9 #RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次; 10 #一般建议使用RETR_TREE,因为包含了所有类型轮廓 11 #methode:轮廓逼近方法 12 #CHAIN_APPROX_NONE: 以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列) 13 #CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分。 14 binary, contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) 15 #绘制图像 16 #cv2.drawcontours(src,contours,contoursIndex,Line Color,LineSize) 17 #contours:轮廓 18 #contoursIndex:轮廓索引,-1代表图像中所有轮廓,其余只要不超过索引范围,则是代表图像中的某个轮廓的外或内轮廓 19 #LineColor:绘制线条的颜色 在opencv中颜色不是RGB而是BGR 20 #LineSize:线条粗细,注意如果线条太宽会导致内外轮廓无法分辨 21 #注意 drawcontours函数会更改并且保存src的图像,所以再使用之前需要用copy复制一个 22 draw_img = img_gray.copy() 23 res = cv2.drawContours(draw_img,contours,-1,(0,0,255),3) 24 Cv_Show('Contours',res)
轮廓特征
1 #注意 contour是一个数组,内含多个轮廓,所以是无法直接计算的需要先取出某一个轮廓 2 #下行就是取出第一个轮廓 3 cnt = contours[0] 4 #求面积 5 cv2.contourArea(cnt) 6 #求周长 True表示闭合的 7 cv2.arcLength(cnt,True)
轮廓近似
1 #轮廓近似 2 #epsilon 阈值 系数越小 离原轮廓差距越小 3 epsilon = 0.1 * cv2.arcLength(cnt,True) 4 approx = cv2.approxPolyDP(cnt,epsilon,True) 5 res = cv2.drawContours(draw_img,[approx],-1,(0,0,255),3) 6 Cv_Show('Approx',res)
轮廓应用
1 #边界矩阵 2 #就是外接矩阵 3 x,y,w,h = cv2.boundingRect(cnt) 4 res = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3) 5 Cv_Show('Rectangle',res) 6 #外接圆 7 (x,y),radius = cv2.minEnclosingCircle(cnt) 8 center = (int(x),int(y)) 9 radius = int(radius) 10 res = cv2.circle(img,center,radius,(255,0,0),3) 11 Cv_Show('Circle',res)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)