opencv里面有检测opencv 连通区域标记的函数吗

网站已改版,请使用新地址访问:
connection 关于提取连通域的两种方法,一种是基于种子法 二次扫描法 OpenCV 256万源代码下载- www.pudn.com
&文件名称: connection& & [
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 930 KB
&&上传时间:
&&下载次数: 0
&&提 供 者:
&详细说明:关于提取连通域的两种方法,一种是基于种子法另外一种是二次扫描法-About extraction of connected components of two methods, one is based on a seed law is another secondary scanning
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&connection&&..........\connection.cpp&&..........\connection.vcxproj&&..........\connection.vcxproj.filters&&..........\connection.vcxproj.user&&..........\Debug&&..........\.....\CL.read.1.tlog&&..........\.....\CL.write.1.tlog&&..........\.....\connection.exe.embed.manifest&&..........\.....\connection.exe.embed.manifest.res&&..........\.....\connection.exe.intermediate.manifest&&..........\.....\connection.lastbuildstate&&..........\.....\connection.log&&..........\.....\connection.obj&&..........\.....\connection.pch&&..........\.....\connection_manifest.rc&&..........\.....\link-cvtres.read.1.tlog&&..........\.....\link-cvtres.write.1.tlog&&..........\.....\link.15732-cvtres.read.1.tlog&&..........\.....\link.15732-cvtres.write.1.tlog&&..........\.....\link.15732.read.1.tlog&&..........\.....\link.15732.write.1.tlog&&..........\.....\link.18504-cvtres.read.1.tlog&&..........\.....\link.18504-cvtres.write.1.tlog&&..........\.....\link.18504.read.1.tlog&&..........\.....\link.18504.write.1.tlog&&..........\.....\link.read.1.tlog&&..........\.....\link.write.1.tlog&&..........\.....\mt.read.1.tlog&&..........\.....\mt.write.1.tlog&&..........\.....\rc.read.1.tlog&&..........\.....\rc.write.1.tlog&&..........\.....\stdafx.obj&&..........\.....\vc100.idb&&..........\.....\vc100.pdb&&..........\QQ截图59.png&&..........\ReadMe.txt&&..........\stdafx.cpp&&..........\stdafx.h&&..........\targetver.h
&输入关键字,在本站256万海量源码库中尽情搜索:连通域需要的函数解析 - 技术蛀虫 - 博客园
随笔 - 105
文章 - 131
OpenCV支持大量的轮廓、边缘、边界的相关函数,相应的函数有moments、HuMoments、findContours、drawContours、approxPolyDP、arcLength、boundingRect、contourArea、convexHull、fitEllipse、fitLine、isContourConvex、minAreaRect、minEnclosingCircle、mathcShapes、pointPolygonTest。还有一些c版本的针对老版本的数据结构的函数比如cvApproxChains、cvConvexityDefects。这里先介绍一些我用过的函数,以后用到再陆续补充。
OpenCV里支持很多边缘提取的办法,可是如何在一幅图像里得到轮廓区域的参数呢,这就需要用到findContours函数,这个函数的原型为:
void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())
void findContours(InputOutputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset=Point())
这里介绍下该函数的各个参数:
输入图像image必须为一个2值单通道图像
contours参数为检测的轮廓数组,每一个轮廓用一个point类型的vector表示
hiararchy参数和轮廓个数相同,每个轮廓contours[ i ]对应4个hierarchy元素hierarchy[ i ][ 0 ] ~hierarchy[ i ][ 3 ],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,该值设置为负数。
mode表示轮廓的检索模式
CV_RETR_EXTERNAL表示只检测外轮廓
CV_RETR_LIST检测的轮廓不建立等级关系
CV_RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
CV_RETR_TREE建立一个等级树结构的轮廓。具体参考contours.c这个demo
method为轮廓的近似办法
CV_CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
CV_CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法
offset表示代表轮廓点的偏移量,可以设置为任意值。对ROI图像中找出的轮廓,并要在整个图像中进行分析时,这个参数还是很有用的。
具体应用参考sample文件夹下面的squares.cpp这个demo
findContours后会对输入的2值图像改变,所以如果不想改变该2值图像,需创建新mat来存放,findContours后的轮廓信息contours可能过于复杂不平滑,可以用approxPolyDP函数对该多边形曲线做适当近似
contourArea函数可以得到当前轮廓包含区域的大小,方便轮廓的筛选
findContours经常与drawContours配合使用,用来将轮廓绘制出来。其中第一个参数image表示目标图像,第二个参数contours表示输入的轮廓组,每一组轮廓由点vector构成,第三个参数contourIdx指明画第几个轮廓,如果该参数为负值,则画全部轮廓,第四个参数color为轮廓的颜色,第五个参数thickness为轮廓的线宽,如果为负值或CV_FILLED表示填充轮廓内部,第六个参数lineType为线型,第七个参数为轮廓结构信息,第八个参数为maxLevel
得到了复杂轮廓往往不适合特征的检测,这里再介绍一个点集凸包络的提取函数convexHull,输入参数就可以是contours组中的一个轮廓,返回外凸包络的点集
还可以得到轮廓的外包络矩形,使用函数boundingRect,如果想得到旋转的外包络矩形,使用函数minAreaRect,返回值为RotatedRect;也可以得到轮廓的外包络圆,对应的函数为minEnclosingCircle;想得到轮廓的外包络椭圆,对应的函数为fitEllipse,返回值也是RotatedRect,可以用ellipse函数画出对应的椭圆
如果想根据多边形的轮廓信息得到多边形的多阶矩,可以使用类moments,这个类可以得到多边形和光栅形状的3阶以内的所有矩,类内有变量m00,m10,m01,m20,m11,m02,m30,m21,m12,m03,比如多边形的质心为 x = m10 / m00,y = m01 / m00。
如果想获得一点与多边形封闭轮廓的信息,可以调用pointPolygonTest函数,这个函数返回值为该点距离轮廓最近边界的距离,为正值为在轮廓内部,负值为在轮廓外部,0表示在边界上。连通域标记(不用opencv系统函数)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
连通域标记(不用opencv系统函数)
你可能喜欢他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)& 相关文章 &
OpenCV_连通区域分析与标记(Connected Component Analysis-Labeling)
链接地址 OpenCV_连通区域分析与标记(Connected Component Analysis-Labeling) 【摘要】 本文主要介绍在CVPR和图像处理领域中较为常用的一种图像区域(Blob)提取的方法——连通区域分析法(连通区域标记法)。文中介绍了两种常见的连通区域分析和标记的算法:1)Two- pass;2)Seed-Filling种子填充,并给出了两个算法的基于OpenCV的C++实现代码。
一、连通区域分析
连通区域(Connected Component)一般是指
OpenCV_连通区域分析(Connected Component Analysis-Labeling)
OpenCV的C++实现代码。 一、连通区域分析 连通区域(Connected Component)一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域(Region,Blob)。连通区域分析(Connected Component Analysis,Connected Component Labeling)是指将图像中的各个连通区域找出并标记。 连通区域分析是一种在CVPR和图像分析处理的众多应用领域中较为常用和基本的方法。例如:OCR识别中字符分割提取(车牌识别、文本识别、字幕识别
opencv_连通域分析(经典总结)
OpenCV_连通区域分析(Connected Component Analysis/Labeling) 【摘要】 本文主要介绍在CVPR和图像处理领域中较为常用的一种图像区域(Blob)提取的方法——连通性分析法(连通区域标记法)。文中介绍了两种常见的连通性分析的算法:1)Two-pass;2)Seed-Filling种子填充,并给出了两个算法的基于OpenCV的C++实现代码。 一、连通区域分析 连通区域(Connected Component)一般是指图像中具有相同像素值且位置相邻的前景
OpenCV_连通区域分析(Connected Component Analysis/Labeling)
OpenCV_连通区域分析(Connected Component Analysis/Labeling) 原文网址:http://blog.csdn.net/fengbingchun/article/details/5940651 【摘要】 本文主要介绍在CVPR和图像处理领域中较为常用的一种图像区域(Blob)提取的方法——连通性分析法(连通区域标记法)。文中介绍了两种常见的连通性分析的算法:1)Two-pass;2)Seed-Filling种子填充,并给出了两个算法的基于OpenCV
二值图像连通区域标记(OpenCV版)
Labeling connected components in binary images (OpenCV version) 因为需要做连通区域标记,Matlab里有现成的算法,但在C++编程的时候发现没有合适的工具可用,从网上找代码,C代码不多,在咱们的csdn博客上找到了两个: [1]链接地址 [2]链接地址 在OpenCV的帮助文档里也找到一个(在帮助文档里搜索void drawContours即可找到): [3]链接地址 其中[1]中提供了两遍扫描法和种子填充法的代码,其中种子填充法
MATLAB图像处理工具箱中的函数bwlabel是把四连通或八连通的区域连接起来,调用语法为: [L,num] = bwlabel(BW,n) 其中BW为输入图像;N可取值为4或8表示连接四连通或八连通区域;NUM为找到的连通区域数目;L为输出图像矩阵,其元素值为整数,背景被标记为0,第一个连通区域被标记为1,第二个连通区域被标记为2,依此类推.所以你不明白的1,2,3即为第1,2,3个连通区域的标记
一种二值图像连通区域标记的新方法
连通区标记是最基本的图像处理算法之一,最近的项目中需要一个纯C语言实现的连通区标记算法,本以为如此基础的算法在网上能搜到现成代码,结果大失所望,讲解标记算法思想的文章很多,给出代码实例的却很少,能找到的几段程序,都有各种各样的问题。于是,自己动手丰衣足食,并拿出来与大家分享。 两阶段法是传统的连通区标记算法,在维基百科上有详细的介绍: Connected Component Labeling 该算法中,第一阶段按从左至右、从上至下的顺序,对整幅图像进行扫描,通过比较每个前景像素的邻域进行连通区
二值图像连通区标记之区域生长法
连通区标记是最基本的图像处理算法之一,最近的项目中需要一个纯C语言实现的连通区标记算法,本以为如此基础的算法在网上能搜到现成代码,结果大失所望,讲解标记算法思想的文章很多,给出代码实例的却很少,能找到的几段程序,都有各种各样的问题。于是,自己动手丰衣足食,并拿出来与大家分享。 两阶段法是传统的连通区标记算法,在维基百科上有详细的介绍: Connected Component Labeling 该算法中,第一阶段按从左至右、从上至下的顺序,对整幅图像进行扫描,通过比较每个前景像素的邻域进行连通区
openCV系列——第7周:在iPhone上运行OpenCV
& Linking & Other Linker Flags,改成Any iPhone Device/Any Architecture ,添加标记 -lstdc++, -lz。 $(SRCROOT)/OpenCV/opencv_{device,simulator}/lib/libcv.a and libcxcore.a 3,Target & Build & Search Paths & Header Search Paths ,这个是路径列表,当编辑C, Objective-C, C++
opencv实现连通域
cvFloodFill连通之后,根据返回区域统计多少个点,并统计之后对此点做标记,依次反复下一个连通区域。
以下是方法二的代码实现: //连通区域结构 typedef struct MyConnectedComp {
list&POINT& listAllP }MyConnectedComp /* *功能说明:统计图像的连通区域 *参数说明:src,表示原始图象;rectSrc,表示图像区域;listData
opencv实现连通域
在本文中使用图像连通域统计使用opencv中的cvFloodFill方法,但是在cvFloodFill方法中CvConnectedComp参数无法返回具体点坐标位置信息,找了些资料、给CvSeq分配空间但是还是contour内容没有值,估计是OPENCV2.00版本不支持。如果想获取点坐标信息有两种方法:一是通过源代码改写cvFloodFill函数来返回点坐标信息;二是cvFloodFill连通之后,根据返回区域统计多少个点,并统计之后对此点做标记,依次反复下一个连通区域
图论算法(6) --- Tarjan算法求强连通分量
if (v.lowlink = v.index) then
start a new strongly connected component
w := S.pop()
add w to current strongly connected component
until (w = v)
output the current strongly connected component
poj-1236--一起学习强连通分量2
v.lowlink := min(v.lowlink, w.index)
// 若v是根则出栈,并求得一个强连通分量
if (v.lowlink = v.index) then
start a new strongly connected component
w := S.pop()
add w to current strongly connected component
MATLAB中的连通区域函数 bwlabel
最近做人脸检测的时候遇到了bwlabel函数,始终没理解,偶然一 搜:
链接地址 L = bwlabel(BW,n) bwlabel函数: Label connected components in 2-D binary image,处理的对象是二值图。 返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8。
四连通或八连通是图像
用连通域分析方法对字符分割(matlab源程序)
文献: 《复杂车辆图像中的车牌定位与字符分割方法》: 1.先搜索标记二值图像的所有连通域 2.根据连通域的形状和进邻连接等特征筛选,合并连通域。对于文档而言,连通域应该符合一定的高度,宽度以及相互间的比例。可以通过某种方法进行度量(根据文档特征),进行区域筛选合并。文中通过寻找波谷位置进行定位,接着以已有的车牌进行匹配。 《一种低质量车辆牌照的字符分割方法》 主流方法:基于投影+先验规则/滤波分析
无法分析倾斜,污损情况
连通区域分析
2.字符分割 字符的分割,我用的是提取连通分量的做法。 连通分量(Connected Component)是图论上的说法, 好像到了图像处理的书,一般都叫连通区域(Connected Region) (这2个说法都是等价的吧?呵呵,我不知道,期待你来回答我) 提取连通分量的实现一般都是 DFS(深度优先搜索)算法啦。 我写的算法用的是8邻域连通, 把纯黑色的像素都提取出来。 (实际上有一个回调函数,可以在算法外部决定提取什么颜色) 返回的是这些像素的点的坐标。 (有坐标就足够了,已经
图像处理之计算二值连通区域的质心
就是通过该点,区域达到一种质量上的平衡状态,可能物理学上讲的比较多,简单点的 说就是规则几何物体的中心,不规则的可以通过挂绳子的方法来寻找。 二:算法流程 1.
输入图像转换为二值图像 2.
通过连通组件标记算法找到所有的连通区域,并分别标记 3.
对每个连通区域运用计算几何距算法得到质心 4.
用不同颜色绘制连通区域与质心,输出处理后图像 三:算法效果 左边为原图, 右边蓝色为连通组件标记算法处理以后结果,白色点为质心 四:关键代码解析 1.
按4连通计算,方形的区域,和翻转的L形区域,有用是对角连接,不属于连通,所以分开标记,连通区域个数为3,就是有3个不同的连接区域。
L = bwlabel(BW,4)
结果如下:
链接地址 哎~气死我了!昨天晚上都写好了……一不小心把网页关了,写的全没了……MD 什么是双连通分量DCC(Double connected component)? 首先说一下一个无向连通图,若去掉任一点或任一边都不影响该图的连通性(本来是连通的,现在仍连通),那么该图是一个双连通图(该图的DCC只有一个即本身)。 DCC是一个无向连通图(注意是无向连通图不是有向图,别把强连通分量与他们搞混了!)的子图,该子图是一个双连通图(尽可能大的双连通图,也就是尽可能包含更多的点)。也就是说
连通区域标记:c++版的bwlabel实现(基于opencv)
类似于matlab中的bwlabel标记连通区域的c++版本实现,基于opencv,如下:
//////// ////bwlabel.cpp #include "cv.h" #include "highgui.h" #define NO_OBJECT 0 #define MIN(x, y) (((x) & (y)) ? (x) : (y)) #define ELEM(img, r, c) (CV_IMAGE_ELEM(img, unsigned char, r, c)) #define
& 2012 - 2016 & aiuxian.com &All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";

我要回帖

更多关于 opencv 寻找连通区域 的文章

 

随机推荐