问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

新手求助,如何用OpenCV去除小块的分散区域

发布网友 发布时间:2022-05-01 20:11

我来回答

1个回答

热心网友 时间:2022-06-22 12:54

// m_imgFeature为黑白目标图像,白色为前景,黑色为背景
// 注意此函数会修改m_imgFeature内容。若其不可更改,应另建立副本
// 1. count contour
CvMemStorage* storage = 0;
storage = cvCreateMemStorage(0); //开辟默认大小的空间
CvSeq* contour = 0;
cvFindContours( m_imgFeature, storage, &contour, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE ); // 查找外边缘

int num = 0;
for( ; contour != 0; contour = contour->h_next )
{
CvRect rect;
rect = cvBoundingRect(contour,0); // 转化为点列
m_arrLine.SetSize(num+1);
m_arrLine.GetAt(num).SetLine(rect.x,rect.x+rect.width ,rect.y,rect.y+rect.height);
num = num+1;
for( i = 0; i < contour->total; i++ )
{
CvPoint* line = (CvPoint*)cvGetSeqElem(contour,i);
cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, 8 );
}
}

// .release
cvReleaseMemStorage(&storage);
//////////////////end of code////////////////////////////
cvFindContours的第5个参数
CV_RETR_EXTERNAL 查找外边缘,各边缘以指针h_next相连
CV_RETR_LIST 查找所有边缘(包含内部空洞),各边缘以指针h_next相连
CV_RETR_CCOMP 查找所有边缘(包含内部空洞)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
转自:http://blog.sina.com.cn/s/blog_4bc179a80100hs50.html

cvFindContours函数使用说明
函数cvFindContours从二值图像中检索轮廓,并返回检测到的轮廓的个数。first_contour的值由函数填充返回,它的值将为第一个外轮廓的指针,当没有轮廓被检测到时为NULL。其它轮廓可以使用h_next和v_next连接,从first_contour到达。

int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,
int header_size=sizeof(CvContour), int mode=CV_RETR_LIST,
int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) );

image
8比特单通道的源二值图像。非零像素作为1处理,0像素保存不变。从一个灰度图像得到二值图像的函数有:cvThreshold,cvAdaptiveThreshold和cvCanny。

storage
返回轮廓的容器。

first_contour
输出参数,用于存储指向第一个外接轮廓。

header_size
header序列的尺寸.如果选择method = CV_CHAIN_CODE, 则header_size >= sizeof(CvChain);其他,则
header_size >= sizeof(CvContour)。

mode
检索模式,可取值如下:
CV_RETR_EXTERNAL:只检索最外面的轮廓;
CV_RETR_LIST:检索所有的轮廓,并将其放入list中;
CV_RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界;
CV_RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次。

method
边缘近似方法(除了CV_RETR_RUNS使用内置的近似,其他模式均使用此设定的近似算法)。可取值如下:
CV_CHAIN_CODE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)。
CV_CHAIN_APPROX_NONE:将所有的连码点,转换成点。
CV_CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分。
CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS:使用the flavors of Teh-Chin chain近似算法
的一种。
CV_LINK_RUNS:通过连接水平段的1,使用完全不同的边缘提取算法。使用CV_RETR_LIST检索模式能使用此方法。

offset
偏移量,用于移动所有轮廓点。当轮廓是从图像的ROI提取的,并且需要在整个图像中分析时,这个参数将很有用。

讨论部分cvDrawContours中的案例显示了任何使用轮廓检测连通区域。轮廓可以用于形状分析和目标识别——可以参考文件夹OpenCV sample中的squares.c。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“苏大强”的本意是什么?抹黑江苏吗? 伦敦奥运会入场式各个国家和地区的先后顺序 参加奥运会入场式的前后顺序 神马是费用性斜视?没听说过,斜视不就是斗鸡眼么 小儿斜视原因 为了不出现重影,右眼会被推到外斜视眼位,称为“废用性斜视” 在八岁时玩鞭炮炸伤左眼,而形成左眼斜视,现在能治好吗 ...后左眼斜视外斜 左眼下半部有光感 视觉模糊 请问左手术的话 能恢复... 两眼视力差距大会怎么样 关于耳洞的小问题~有经验的和懂行的进~ ccd相机上的图标什么意思 请问数码相机上各个开关按扭图标都代表什么意思啊。 opencv cvDrawContours填充轮廓外的颜色 opencv如何提取形状 openCV里怎么求二值化图像的面积和轮廓周长 Opencv中cvBoundingRect函数怎么用? 在OPENCV中可以用cvFindContours函数查找类型为IplImage二值图的轮廓... 在opencv中,用函数cvfindcontours查找时为什么要将彩色图像转换成灰度图像 opencv中cvfindcontours函数使用CV_RETE_TREE模式,那些轮廓是怎么存储的? opencv中使用findContours、contourArea的问题。 你好,请教一下,我要在1mm厚纯钼板上钻1.3mm小孔,攻M1.6螺纹,应该用什么钻头及丝攻? 数码单反相机如何更清楚、便捷的看回放照片(像手机一样*、修片)? 数码相机怎么能在相机中添加图标 数码相机上出现这个图标怎么办 数码相机中的这个图标什么意思? 怎样识别数码相机的标识 数码相机屏幕上图标是什么意思?怎样消失。 数码相机旋钮上的图标是什么意思 小钻头如何钻深孔不断钻头 1mm孔p20的材料用什么钻头 急!!!opencv做目标跟踪的时候,怎样把目标用矩形圈出来 现在想用OPENCV作运动目标的识别和跟踪,用什么方法最好,最快入门? opencv floodfill和drawcontours函数的区别 数码相机 显示屏上的标志都代表什么 谢啦 opencv问题,我在提取图像的轮廓,有提取轮廓的现成函数,我现在是想提... 女生回答,假设你做梦梦到一个长得像王俊凯,脸比你小一圈,皮肤白嫩,家里做房地产生意家产过亿的男生? 梦见家人介绍了一个有钱又帅气的男朋友 梦见一个男生是我老公,我们有一个宝宝,他带我回他家,我发现他家是富豪? l&#39;ll怎么发音? 日本产品ipsa流金水的正品图片哪能查到? l&#39;ll怎么读? 英语will 缩写发音 ‘ll怎么发音标.还有shall的否定式shan’t.谢谢 西班牙语的ll如何发音? ipsa流金水淘宝代购为什么比专柜便宜 西班牙语单词l和ll的读法怎么区分? i,ll什么怎么读 西班牙语中Y和LL的发音有什么区别 电笔、万用表、尖嘴钳、剥线钳、美工刀的用途? I&#39;ll这怎么读 西班牙语里的ll到底怎么发音,我听光盘上是读类似于“加”的读音,符号类似于“入”,求问啊,这个坑啊.