这是我参考大神的作品,金字塔分割算法的大概意思就是,像金字塔那样,上层都是以下层为基础的,所以只要上下层之间在某个阈值1内就可以形成链接关系,而同之间的差值在阈值2范围内,就能确定他们的同层关系,opencv有专门的函数来实现这种算法,pyrSegmentation,这个函数的参数可以轻松地查到,我把程序贴在下面:
#include "cv.h"
#include "highgui.h"
#include <opencv2/legacy/legacy.hpp>
int main(){
IplImage *img1 = cvLoadImage("rice.png",CV_LOAD_IMAGE_UNCHANGED);
IplImage *img2 = cvCreateImage(cvSize(img1->width,img1->height), IPL_DEPTH_8U, 1);
cvNamedWindow("Origion");
cvNamedWindow("PyrSegmentation");
CvMemStorage *storage = cvCreateMemStorage(0);
CvSeq *cmp = NULL;
cvPyrSegmentation(img1, img2, storage, &cmp, 8, 150, 30);
cvShowImage("Origion", img1);
cvShowImage("PyrSegmentation", img2);
cvWaitKey(0);
cvReleaseImage(&img1);
cvReleaseImage(&img2);
cvDestroyAllWindows();
return 0;
}
有以下几个说明,#include <opencv2/legacy/legacy.hpp>这一句包含了PyrSegmentation()函数,源图像必须是灰度图,而且像素数是偶数。