opencv 最大连通域_opencv查找二值图像最大连通区域

该博客实例介绍了如何利用OpenCV库在二值图像中查找并返回最大连通区域的矩形边界框。通过cvFindContours函数找到轮廓,然后计算每个轮廓的面积,最终确定并返回面积最大的连通区域。
摘要由CSDN通过智能技术生成

【实例简介】查找二值图像最大连通区域,返回连通域的矩形框

【实例截图】

【核心代码】

#include "cv.h"

#include "cxcore.h"

#include "highgui.h"

CvRect FindMaxContour(IplImage *pImg)

{

IplImage* pContourImg = NULL;

CvMemStorage * storage = cvCreateMemStorage(0);

CvSeq * contour = 0;

CvSeq *contmax = 0;

int mode = CV_RETR_EXTERNAL;

int area,maxArea = 10;//设面积最大值大于10Pixel

CvRect aRect;

cvFindContours( pImg, storage, &contour, sizeof(CvContour),mode, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));

for(;contour;contour = contour->h_next)

{

area = fabs(cvContourArea( contour, CV_WHOLE_SEQ )); //获取当前轮廓面积

//printf("area == %d\n", area);

if(area > maxArea)

{

contmax = contour;

maxArea = area;

}

}

aRect = cvBoundingRect( contmax, 0 );

return aRect;

}

int main( int argc, char** argv )

{

//声明IplImage指针

IplImage* pImg = cvLoadImage("black.jpg",0);

IplImage* pImg_tmp = cvLoadImage("black.jpg",0);

pImg_tmp =cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,1);

cvCopy(pImg,pImg_tmp);

CvRect aRect;

aRect = FindMaxContour(pImg_tmp);

CvPoint pt1;

CvPoint pt2;

pt1.x = aRect.x;

pt1.y = aRect.y;

pt2.x = aRect.x aRect.width;

pt2.y = aRect.y aRect.height;

cvRectangle(pImg,pt1,pt2,CV_RGB(255,255,255));

//显示图像

cvShowImage( "contour", pImg );

cvWaitKey(0);

//销毁窗口

cvDestroyWindow( "src" );

cvDestroyWindow( "contour" );

//释放图像

cvReleaseImage( &pImg );

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值