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

相关推荐
墨舟的AI笔记3 小时前
大模型游戏剧情评测:用自动化指标抑制幻觉与 OOC 出戏
人工智能
武子康3 小时前
从世界状态到可执行控制:Cosmos 3 Edge 与机器人控制器之间应建立什么合同
人工智能·agent·nvidia
37.2℃9953 小时前
Claude Design哪个公司技术好
python·设计模式
我是大卫4 小时前
【图】解LLM:用图理解大语言模型
人工智能
157092511344 小时前
【无标题】
开发语言·python·算法
勇叔4 小时前
从 LangChain SQLAgent 天生缺陷到五把安全锁落地 — 牧场 AI 查询实战踩坑指南
人工智能
Kel4 小时前
GQA 与 KV 缓存(Grouped-Query Attention & KV Cache)
人工智能
DogDaoDao4 小时前
OpenBrowser 深度解析:让 AI 真正「用上」浏览器的自主代理框架
人工智能·程序员·大模型·github·web·ai工具·openbrowser
AI工具人PM产品经理4 小时前
CSDN 自动发布全流程实战:从 CKEditor HTML 注入到创作页就地发布
python
_Jimmy_4 小时前
Tool Calling 与 Function Calling 区别
人工智能·python·langchain