#include "highgui.h"
#include "cv.h"
int main()
{
像。
//载入待处理图像
IplImage *img=cvLoadImage("panda.jpg");
IplImage *back=cvLoadImage("Airplane.jpg");
if(!img && !back) return -1;
//创建纯白背景,熊猫图像的灰度图
IplImage *wback=cvCreateImage(cvSize(img->width,img->height),img->depth,1);
IplImage *img_gray=cvCreateImage(cvSize(img->width,img->height),img->depth,1);
IplImage *diff=cvCreateImage(cvSize(img->width,img->height),img->depth,1);
cvZero(wback);
cvAddS(wback,cvScalar(255),wback);
cvCvtColor(img,img_gray,CV_RGB2GRAY);
//作纯白背景与熊猫图像灰度图的差,并对得到的灰度图像进行阈值操作得到二值图
cvAbsDiff(img_gray,wback,diff);
cvThreshold(diff,diff,5,255,CV_THRESH_BINARY);
//用漫水填充法进一步去噪,以得到更加清晰的掩码
double area=0;
CvRect rect;
CvPoint point,point_max;
CvConnectedComp comp;
diff->origin=0;
for(int j=0;j<=diff->height;j++)
{
uchar *ptr=(uchar*)diff->imageData+j*diff->widthStep;
for(int i=0;i<=diff->width;i++)
{
if (ptr[i]==255)
{
ptr[i]==0;
break;
if (i==diff->width|j==diff->height|i==0|j==0)
{
}
point=cvPoint(i,j);
cvFloodFill(diff,point,cvScalar(100),cvScalar(15),cvScalar(15),&comp,4,0);
if(area==0)
{
point_max=point;
area=comp.area;
rect=comp.rect;
}
}
cvFloodFill(diff,point,cvScalar(0),cvScalar(15),cvScalar(15),&comp,4,0);
cvSetImageROI(diff,rect);
cvAddS(diff,cvScalar(155),diff);
cvResetImageROI(diff);
area=comp.area;
rect=comp.rect;
point_max=point;
}
else if(comp.area>=area)
{
}
else
{
}
//cvShowImage("mask",diff);
//cvWaitKey(0);
std::cout<
width,img->height);
cvSetImageROI(back,b_rect);
cvCopy(img,back,diff);
cvResetImageROI(back);
//显示原始熊猫图,掩码,带有熊猫头的背景图
cvNamedWindow("img");
cvNamedWindow("diff");
cvNamedWindow("back");
cvShowImage("img",img);
cvShowImage("diff",diff);
cvShowImage("back",back);
cvWaitKey(0);
//释放内存,关闭窗口
cvReleaseImage(&img);
cvReleaseImage(&back);
cvReleaseImage(&wback);
cvReleaseImage(&img_gray);
cvReleaseImage(&diff);
cvDestroyAllWindows();