| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 一篇文章学会轮廓检测 -> 正文阅读 |
|
[人工智能]一篇文章学会轮廓检测 |
目录 1.什么是轮廓?为什么要进行轮廓检测?轮廓是什么? 1.对于人眼来说,是图片中某一物体的边缘。 2.对于机器来说,是矩阵中沿着边缘的相同颜色即相同像素点强度的所有连续点的曲线。(我们在前篇中已经详细讲过图片在计算机中其实是一个矩阵:图像与矩阵) 3.轮廓与边缘的区别:轮廓是一圈包住物体,边缘可以使零零散散的一条线。 为什么要对轮廓进行检测?? 轮廓是后续用于对图中物体进行形状分析或者对象识别的有效媒介。 2.轮廓检测原理轮廓检测的原理是轮廓跟踪。即通过顺序逐点跟踪目标边界,最终找出的所有点构成的就是边界。 注意:在开始讲述之前,最好确保图像已经二值化(即只存在黑白二色),这不仅是理论的前提还是后面程序实现的前提。另外,图像二值化可通过设置阈值使用掩膜卷积过滤或者Canny边缘检测来实现:制作掩膜3.1.3②、Canny边缘检测。 2.1寻找第一个边界点从上到下,从左到右地在图片中找到第一个边界点E0。? 2.2寻找下一个边界点怎么找?可通过搜寻4连通域(即像素点的上、下、左、右)或者8连通域(不仅包括上、下、左、右还包括的左上、右上、左下、右下)来找。 找什么?找与本像素点值相同的连着的另一个像素点,此像素点即下一个边界点。 具体方法:
3.程序实现(Python OpenCv)3.1寻找轮廓contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
3.1.1轮廓的轮廓列表与层次关系通过例子来掌握轮廓的轮廓列表与层次关系,给出一张二值图像: 先来说说为什么2有2a,3有3a,而0,1,4,5却没有呢? 答:2,3所在轮廓是一个内空心的闭合图形。所以2是所在轮廓的外轮廓,2a是所在轮廓的内轮廓。相应的,3是所在轮廓的外轮廓,3a是所在轮廓的内轮廓。而0,1是线段、4,5是实心图形,没有内外之分,只有简单的轮廓之称。 轮廓列表: 很显然,轮廓列表contours = [0,1,2,2a,3,3a,4,5]。 层次关系: 在逻辑层面,可以很轻松地从图中看出0,1,2是同一层次的轮廓,而2有个子轮廓2a,2a又有个子轮廓3,3又又有个子轮廓3a,3a又又又有两个子轮廓4,5,并且4,5处于同一层次。(2的子轮廓是2a,那么2a的父轮廓就是2,这种简单的理论自己想一下就不说了...) 而在opencv中将每个轮廓的层次信息(同层次下一个,同层次上一个,子轮廓,父轮廓)包含在这样一个4值数组中:[Next, Previous, First_Child, Parent]。 因此图中我们可得到的层次关系信息为: 0->[1,-1,-1,-1] 1->[0,2,-1,-1] 2->[1,-1,2a,-1] 2a->[-1,-1,3,2] ...... 注意: 1.不存在的层次关系用-1表示。 2.实际的程序中并没有2a,3a这种说法,这里只是为了方便表示,实际程序中2a应该变3,3应该便4,3a应该变5,依次往后挪...... 3.实际程序hierarchy输出案例(与上图无关): 3.1.2轮廓检索模式opencv中的轮廓检索模式有4种:
还是结合上面那个例子:
似懂非懂的话可以再看看这个:轮廓检索方式具体案例 3.1.3轮廓近似方法opencv中的轮廓近似方法也有4种:
3.2绘制轮廓cv.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) contourIdx就是contours列表中的索引。如输入3则绘制第3个轮廓,输入-1则绘制所有轮廓。 其他的本专栏前面几章都讲过类似的这里就不讲了,看看属性名字应该都懂了。 注意: 1.输入的应该是原始图像。 2.输入图像直接在原图上被修改。 使用案例:
4.OpenCv中的轮廓相关属性方法首先得找一条轮廓吧:
1.特征矩
2.轮廓面积
3.轮廓周长
更多的,可以查看OpenCv官方中文文档。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 20:32:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |