生活随笔
收集整理的這篇文章主要介紹了
opencv 金字塔图像分割
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我所知的opencv中分割函數(shù):watershed(只是看看效果,不能返回每類pixel類屬),cvsegmentImage,cvPyrSegmentation(返回pixel類屬)
金字塔分割原理篇在這里,本文只提供代碼。
Segment函數(shù):
[cpp]?view plain
?copy ? #include<cv.h>?? #include?<cvaux.h>?? #include?<opencv\cxcore.hpp>?? #include?<opencv.hpp>?? #include?<nonfree.hpp>?? #include?<core/core.hpp>?? #include?<imgproc/imgproc.hpp>?? #include?<imgproc/imgproc_c.h>?? #include?<vector>?? #include?<map>?? #include?<highgui.h>?? using?namespace?std;?? using?namespace?cv;?? void?Segment(IplImage*?I)?? {?? ?? ?????? ????int?mode?=?CV_RETR_LIST;?? ????int?level?=?2,?block_size?=?1000;?? ????CvMemStorage*?storage?=?cvCreateMemStorage(block_size);?? ????CvSeq*?components;?? ????double?threshold1?=?100,threshold2?=?50;?? ?? ????IplImage?*src?=?cvCreateImage(cvGetSize(I),IPL_DEPTH_8U,1);?? ????cvCvtColor(I,src,CV_RGB2GRAY);?? ????IplImage*?dst?=?cvCreateImage(cvGetSize(I),IPL_DEPTH_8U,1);?? ?? ????src->width?=?dst->width?=?(I->width?&?-(1?<<?level));?? ????src->height?=?dst->height?=?(I->height?&?-(1?<<?level));?? ?? ?????? ????cvPyrSegmentation(src,dst,storage,&components,level,threshold1,threshold2);?? ????int?ncomp?=?components->total;?? ????cout<<"segemented?into?"<<ncomp<<"?components."<<endl;?? ?? ?????? ????map<int,?int>mapping;?? ????for?(int?i?=?0;?i<ncomp;?i++)?? ????{?? ????????CvConnectedComp*?cc?=?(CvConnectedComp*)?cvGetSeqElem(components,i);?? ????????cvDrawRect(dst,cvPoint(cc->rect.x,cc->rect.y),cvPoint(cc->rect.x+cc->rect.width,cc->rect.y+cc->rect.height),cvScalar(255,255,0));?? ????????mapping.insert(pair<int,int>(cc->value.val[0],i));?? ????}?? ????cvShowImage("segementation",dst);?? ????waitKey();?? ????cvReleaseMemStorage(&storage);?? }??
彩色圖分割版本:
[cpp]?view plain
?copy ? void?Segment(IplImage*?I)?? {?? ?????? ????int?mode?=?CV_RETR_LIST;?? ????int?level?=?2,?block_size?=?1000;?? ????CvMemStorage*?storage?=?cvCreateMemStorage(block_size);?? ????CvSeq*?components;?? ????double?threshold1?=?10,threshold2?=?50;?? ?? ????IplImage?*src?=?cvCreateImage(cvGetSize(I),IPL_DEPTH_8U,3);?? ????src?=?cvCloneImage(I);?? ????IplImage*?dst?=?cvCreateImage(cvGetSize(I),IPL_DEPTH_8U,3);?? ?? ????src->width?=?dst->width?=?(I->width?&?-(1?<<?level));?? ????src->height?=?dst->height?=?(I->height?&?-(1?<<?level));?? ?? ?????? ????cvPyrSegmentation(src,dst,storage,&components,level,threshold1,threshold2);?? ????int?ncomp?=?components->total;?? ????cout<<"segemented?into?"<<ncomp<<"?components."<<endl;?? ?? ?????? ????map<int,?int>mapping;?? ????for?(int?i?=?0;?i<ncomp;?i++)?? ????{?? ????????CvConnectedComp*?cc?=?(CvConnectedComp*)?cvGetSeqElem(components,i);?? ????????cvDrawRect(dst,cvPoint(cc->rect.x,cc->rect.y),cvPoint(cc->rect.x+cc->rect.width,cc->rect.y+cc->rect.height),cvScalar(255,255,0));?? ????????mapping.insert(pair<int,int>(cc->value.val[0],i));?? ????}?? ????cvShowImage("segementation",dst);?? ????waitKey();?? ????cvReleaseMemStorage(&storage);?? } ? from:?http://blog.csdn.net/abcjennifer/article/details/18215953
總結(jié)
以上是生活随笔為你收集整理的opencv 金字塔图像分割的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。