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])

相关推荐
七芒星202334 分钟前
多目标识别YOLO :YOLOV3 原理
图像处理·人工智能·yolo·计算机视觉·目标跟踪·分类·聚类
Learn Beyond Limits1 小时前
Mean Normalization|均值归一化
人工智能·神经网络·算法·机器学习·均值算法·ai·吴恩达
byzy1 小时前
【论文笔记】VisionPAD: A Vision-Centric Pre-training Paradigm for Autonomous Driving
论文阅读·深度学习·计算机视觉·自动驾驶
摩羯座-185690305941 小时前
爬坑 10 年!京东店铺全量商品接口实战开发:从分页优化、SKU 关联到数据完整性闭环
linux·网络·数据库·windows·爬虫·python
ACERT3331 小时前
5.吴恩达机器学习—神经网络的基本使用
人工智能·python·神经网络·机器学习
韩立学长2 小时前
【开题答辩实录分享】以《基于python的奶茶店分布数据分析与可视化》为例进行答辩实录分享
开发语言·python·数据分析
C嘎嘎嵌入式开发2 小时前
(一) 机器学习之深度神经网络
人工智能·神经网络·dnn
Aaplloo2 小时前
【无标题】
人工智能·算法·机器学习
大模型任我行2 小时前
复旦:LLM隐式推理SIM-CoT
人工智能·语言模型·自然语言处理·论文笔记
tomlone2 小时前
AI大模型核心概念
人工智能