(opencv5)轮廓检测函数
2024-10-09 21:15:41
(opencv5)轮廓检测函数
contours, hierarchy = cv2.findContours(img, mode, method,[offset)
注意 : 1.输入为二值图像,黑色为背景,白色为目标
2.该函数会修改原图像,因此若想保留原图像在,则需拷贝一份,在拷贝图里修改。
img :
二值图像
mode:
cv2.RETR_EXTERNAL: (retrieve external检测轮廓)只检测最外面的轮廓
cv2.RETR_LIST: 检测的轮廓不建立等级关系,都是同级
cv2.RETR_CCOMP: 建立两个等级的轮廓,上面一层为外边界,里面一层为内孔的边界信息
cv2.RETR_TREE: 建立一个等级树结构的轮廓
offset:(可选参数)
轮廓点的偏移量,格式为tuple,如(-10, 10)表示轮廓点沿X负方向偏移10个像素点,沿Y轴方向偏移10个像素点
method:
cv2.CHAIN_APPROX_NONE : 存储所有边界点
cv2.CHAIN_APPROX_SIMPLE:压缩垂直、水平、对角方向,只保留端点
cv2.CHAIN_APPROX_TX89_L1:使用teh-Chini近似算法
cv2.CHAIN_APPROX_TC89_KCOS:使用teh-Chini近似算法
返回值 :
contours : 轮廓点。列表格式,每一个元素为一个三维数组(其形状为(n, 1, 2), 其中n表示轮廓点个数,2表示像素点坐标(x, y))。每一个元素表示一个轮廓。
hierarchy : 轮廓间的层次关系,为三维数组,形状为(1, n, 4),其中n表示轮廓总个数,4指的是用4个数表示个轮廓间的相互关系。第一个数表示同级轮廓的下一个轮廓编号,第二个数表示同级轮廓的上一个轮廓编号,第三个数表示该轮廓下一级轮廓的编号,第四个数表示该轮廓的上一级轮廓的编号。
示例图片
示例代码01
import cv2
def cv_show(image, name):
cv2.imshow(name, image)
cv2.waitKey(0)
cv2.destroyAllWindows()
img = cv2.imread('tu1.jpg')
# 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化 超过127取255,没超过取0
thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)[1]
# 轮廓检测, 检测所有外轮廓, 存储所有边界点, 返回 轮廓点(列表格式),轮廓间的层次关系(三维数组)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# 绘制轮廓前复制图像,不然原图会变哒!
res = cv2.drawContours(img.copy(), contours, -1, (0, 0, 255), 2)
print('contours', type(contours), contours)
print('hierarchy', type(hierarchy), hierarchy)
cv_show(res, 'res')
运行结果01
示例代码02
import cv2
def cv_show(image, name):
cv2.imshow(name, image)
cv2.waitKey(0)
cv2.destroyAllWindows()
img = cv2.imread('tu1.jpg')
# 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化 超过127取255,没超过取0
thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)[1]
# 轮廓检测, 只检测外轮廓, 存储所有边界点, 返回 轮廓点(列表格式),轮廓见的层次关系
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# 绘制轮廓前复制图像,不然原图会变哒!
res = cv2.drawContours(img.copy(), contours, -1, (0, 0, 255), 2)
print('contours', type(contours), contours)
print('hierarchy', type(hierarchy), hierarchy)
cv_show(res, 'res')
运行结果02
最新文章
- vs2015提示中文
- Oracle连接与会话
- Mina入门教程(二)----Spring4 集成Mina
- chartjs执行图表
- 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)
- 17.1.1.2 Setting the Replication Slave Configuration
- ie9以上浏览器input文本框/密码框后面的小叉子/小眼睛问题
- css 权威指南笔记( 五)结构和层叠之三种样式来源
- 199bit总结的影响最大的十个算法
- 【转】增强 scite 编辑器的代码提示功能
- mysql 解压缩和赋权
- location的使用
- Linux内存布局
- 菜鸟学IT之IP基础
- 防盗链[referer]
- 原生js实现简单的全屏滚动
- Linux入门:usermod - 修改用户帐户信息
- SpringBoot之静态资源放行
- python读取excel表
- Java学习笔记(二十三):final关键字