#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)
{
if (i==diff->width|j==diff->height|i==0|j==0)
{
ptr[i]==0;
break;
}
point=cvPoint(i,j);
cvFloodFill(diff,point,cvScalar(100),cvScalar(15),cvScalar(15),&comp,4,0);
if(area==0)
{
point_max=point;
评论20