opencv findContuors 详解
来源:互联网 发布:360游戏优化器安卓版 编辑:程序博客网 时间:2024/06/05 03:08
官网的解释很明白,结合http://blog.csdn.net/jfuck/article/details/9620889画了两个图一起解释就直观了。主要的方法来自Suzukietc. 1985这篇1985年的论文。
函数原型:
C++: void findContours(InputOutputArray image,OutputArrayOfArrays contours, OutputArray hierarchy,int mode, int method, Point offset=Point())¶
C++: void findContours(InputOutputArray image,OutputArrayOfArrays contours, int mode, int method,Point offset=Point())
Python: cv2.findContours(image, mode, method[, contours[, hierarchy[,offset]]]) → contours, hierarchy
参数解释:
image: 输入图像
contours:检测到的contours,以点对的形式存储
hierarchy:可选择的输出,包含图像的拓扑结构。下面的这个图解释了hierarchy的结构。
其中如果没有的话为-1. 还可以用一个树形图来表示他们之间的关系,下图左边是假设有5个边界,他们之间的包含关系可以直接看出,也可以用右边的树状图表示,那么上面的表格就用四列数据表示了这种树状关系,读者可以将二者一一对应起来。这个hierarchy的索引是从0开始的(0-based),使用的时候注意即可。
mode: Contour retrievalmode. 也就是检测边缘的方法,不同的mode返回不同的东西。
l CV-RETR_EXTERNAL: 听名字就知道了,返回的是仅仅最外边的一层contours。上文博客说此时hierarchy没有任何作用是不正确的,只是后两列中的数值设为-1了,前两列的数还有意义。
l CV_RETR_LIST: 这个是只返回轮廓信息,而不识别不同轮廓之间的拓扑结构,因此此时hierarchy就没什么用了。
l CV_RETR_CCOMP: 这个返回的是两层树状结构,物体(components)在第一层,空洞(holes)在第二层。如果空洞中仍然有物体,那么其边界也会被列入第一层。
l CVRETR_TREE: 这个就是最全的一个了,所有的边界信息外加hierarchy,也就是上图中的树状图。
method:这个参数就是为了节省点内存空间。对于一条直线没有必要保存下来他全部的点,只需要保存下来端点就可以还原整条直线了。因此不同参数对应着不同的边界点保存方法。
l CV_CHAIN_APPROX_NONE:看名字就知道了,不估计嘛,因此所有点都保存下来。
l CV_CHAIN_APPROX_SIMPLE:看名字吧,简单的估计方法,具体就不深究了。
注意:老版本的Python中使用cv2.CHAN_APPROX_NONE,也就是说没有CV_字符,其他同理,注意即可。
好了,又到了大家最喜欢的上代码时间了:
import cv2import numpy as npimport matplotlib.pyplot as plt#init image img = np.ones((200, 200, 3), dtype = np.uint8) * 255img[:, :9, :] = 0img[:, -10:, :] = 0img[:9, :, :] = 0img[-10:, :, :] = 0#convert colorgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#find contourscontours, hierarchy = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)#draw contourscv2.drawContours(img, contours, -1, (0,255, 0), 1)plt.figure(), plt.imshow(img, cmap = 'gray')plt.show()结果如下:
- opencv findContuors 详解
- 【opencv】 opencv之Mat详解
- opencv cvhog详解
- opencv cvhog详解
- opencv cvhog详解
- opencv Mat详解
- OpenCV Mat类详解
- opencv 中的cvMat详解
- OpenCV数据结构Mat详解
- opencv 光流法详解
- OpenCV数据结构Mat详解
- openCV Mat类详解
- opencv waitKey()详解
- opencv各类滤波器详解
- OpenCV-Mat结构详解
- OpenCV Stitching_detailed 详解
- 【OpenCV】goodFeaturesToTrack_Demo详解
- 【OpenCV】cvFindContours参数详解
- 信号高级特性
- 后台传来毫秒格式日期换成年月日时分秒显示在前台
- xlistview刷新 加载方法
- 阻塞和非阻塞系统调用
- flexigrid插件增加复选框
- opencv findContuors 详解
- 总结:让一个div垂直水平居中
- I
- Java 归并排序
- 动态规划问题总结
- day10 tcp状态转换
- 深度学习 —— 逻辑回归
- postfix空壳邮件
- Search in Rotated Sorted Array