主要内容:对比新旧函数,用于过滤原始图像中轮廓分析后较小的区域,留下较大区域。
关键字:connectedComponentsWithStats
在以前,常用的方法是”是先调用 cv::findContours() 函数(传入cv::RETR_CCOMP 标志),随后在得到的连通区域上循环调用 cv::drawContours() “
比如,我在GOCVHelper中这样进行了实现
//寻找最大的轮廓 VP FindBigestContour(Mat src){ int imax = 0; //代表最大轮廓的序号 int imaxcontour = -1; //代表最大轮廓的大小 std::vector<std::vector<Pointcontours; findContours(src,contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE); for (int i=0;i<contours.size();i++){ int itmp = contourArea(contours[i]);//这里采用的是轮廓大小 if (imaxcontour < itmp ){ imax = i; imaxcontour = itmp; } } return contours[imax]; } //寻找并绘制出彩色联通区域 vector<VP> connection2(Mat src,Mat& draw){ draw = Mat::zeros(src.rows,src.cols,CV_8UC3); vector<VP>contours; findContours(src.clone(),contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE); //由于给大的区域着色会覆盖小的区域,所以首先进行排序操作 //冒泡排序,由小到大排序 VP vptmp; for(int i=1;i<contours.size();i++){ for(int j=contours.size()-1;j>=i;j--){ if (contourArea(contours[j]) < contourArea(contours[j-1])) { vptmp = contours[j-1]; contours[j-1] = contours[j]; contours[j] = vptmp; } } }
在OpenCV3中有了新的专门的函数 cv::connectedComponents() 和函数 cv::connectedComponentsWithStats()
定义:
int cv::connectedComponents ( cv::InputArrayn image, // input 8-bit single-channel (binary) cv::OutputArray labels, // output label map int connectivity = 8, // 4- or 8-connected components int ltype = CV_32S // Output label type (CV_32S or CV_16U) ); int cv::connectedComponentsWithStats ( cv::InputArrayn image, // input 8-bit single-channel (binary) cv::OutputArray labels, // output label map cv::OutputArray stats, // Nx5 matrix (CV_32S) of statistics: // [x0, y0, width0, height0, area0; // ... ; x(N-1), y(N-1), width(N-1), // height(N-1), area(N-1)] cv::OutputArray centroids, // Nx2 CV_64F matrix of centroids: // [ cx0, cy0; ... ; cx(N-1), cy(N-1)] int connectivity = 8, // 4- or 8-connected components int ltype = CV_32S // Output label type (CV_32S or CV_16U) );
其中,新出现的参数
stats:长这样
分别对应各个轮廓的x,y,width,height和面积。注意0的区域标识的是background
而centroids则对应的是中心点
而label则对应于表示是当前像素是第几个轮廓
例子:
对于图像
Mat img = cv::imread( "e:/sandbox/rect.png",0); cv::Mat img_edge, labels, img_color, stats,centroids; cv::threshold(img, img_edge, 128, 255, cv::THRESH_BINARY); bitwise_not(img_edge,img_edge); cv::imshow("Image after threshold", img_edge); int i, nccomps = cv::connectedComponentsWithStats ( img_edge, labels, stats, centroids ); cout << "Total Connected Components Detected: " << nccomps << endl; vector<cv::Vec3b> colors(nccomps+1); colors[0] = Vec3b(0,0,0); // background pixels remain black. for( i = 1; i < nccomps; i++ ) { colors[i] = Vec3b(rand()%256, rand()%256, rand()%256); if( stats.at<int>(i, cv::CC_STAT_AREA) < 200 ) colors[i] = Vec3b(0,0,0); // small regions are painted with black too. } img_color = Mat::zeros(img.size(), CV_8UC3); for( int y = 0; y < img_color.rows; y++ ) for( int x = 0; x < img_color.cols; x++ ) { int label = labels.at<int>(y, x); CV_Assert(0 <= label && label <= nccomps); img_color.at<cv::Vec3b>(y, x) = colors[label]; } cv::imshow("Labeled map", img_color); cv::waitKey();
注意:
1、对于OpenCV来说,白色代表有数据,黑色代表没有数据,所以图像输入之前要转换成”黑底白图“
2、看labels 和 stats,其中第1 2 6 个的面积小于200
而labels中
完全对的上号,结果为
以上这篇浅谈OpenCV中的新函数connectedComponentsWithStats用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】