Python Opencv实践 - 轮廓检测

复制代码
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = cv.imread("../SampleImages/map.jpg")
print(img.shape)
plt.imshow(img[:,:,::-1])

#Canny边缘检测
edges = cv.Canny(img, 127, 255, 0)
plt.imshow(edges, cmap=plt.cm.gray)

#查找轮廓
#cv.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])
#image: 原图
#mode: 轮廓模式
#    cv2.RETR_EXTERNAL表示只检测外轮廓
#    cv2.RETR_LIST检测的轮廓不建立等级关系
#    cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
#    cv2.RETR_TREE建立一个等级树结构的轮廓。
#method: 轮廓的近似方法
#    cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
#    cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
#    cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法
#返回值: opencv2返回两个值:contours:hierarchy。注:opencv3会返回三个值,分别是img, countours, hierarchy
#参考资料:https://blog.csdn.net/leemboy/article/details/84932885
contours,hierachy = cv.findContours(edges, cv.RETR_TREE, cv.CHAIN_APPROX_NONE)

#绘制轮廓
#cv.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset ]]]]]) 
#image:原图
#contours: 轮廓数据
#contouridx:要绘制的轮廓的index,如果是-1,表示绘制所有轮廓。
#color,thickness,lineType: 轮廓线条颜色,厚度和线的类型
img = cv.drawContours(img, contours, -1, (0,255,0), 2)

plt.imshow(img[:,:,::-1])

相关推荐
私域实战笔记几秒前
企业微信SCRM怎么选?工具适配与落地实操指南
人工智能·数据挖掘·企业微信·scrm·企业微信scrm
私域实战笔记2 分钟前
企业微信SCRM工具该如何选择?从需求匹配出发的筛选思路
大数据·人工智能·企业微信·scrm·企业微信scrm
微盛企微增长小知识3 分钟前
SCRM工具测评:助力企业微信私域运营的核心功能解析
大数据·人工智能·企业微信
wrangler_csdn4 分钟前
如何一键将 PDF 转为 Word?
人工智能·安全·ai
#卢松松#7 分钟前
这是我们在企业微信上和松松云后台对接的一个功能
人工智能·创业创新
城市直通车10 分钟前
聚焦新质生产力:火山引擎豆包大模型落地峰会赋能杭州数字经济
人工智能·火山引擎
TG:@yunlaoda360 云老大12 分钟前
火山引擎升级AI云原生套件:AgentKit、ServingKit、TrainingKit全链路加速AI应用落地
人工智能·云原生·火山引擎
恒点虚拟仿真15 分钟前
AI+XR赋能智慧研创中心:打破职业教育实训困境,推动产教深度融合
人工智能·虚拟仿真·产教融合·职业教育·虚拟仿真实训·ai+xr·智慧研创中心
字节数据平台17 分钟前
极氪与火山引擎深化合作,Data Agent赋能车辆数据管理效率
人工智能·火山引擎
测试-鹏哥28 分钟前
要将ITP集成到Jenkins Pipeline中,实现开发发版时自动触发自动化测试
运维·python·测试工具·ci/cd·jenkins