这是在Opencvchina网站上每周一练题目,第十五期要求把蓝色背景转为白色背景,原图下所示:
代码如下所示:
// 证件照背景变色.cpp : 定义控制台应用程序的入口点。
//
/*=========================================================================
名称:图片背景由蓝色转为白色
时间:2013.08
说明:Opencvchina网站15期的每周一练题目
=========================================================================*/
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
int _tmain(int argc, _TCHAR* argv[])
{
//----------声明图片指针与加载----------//
IplImage *src, *dst;
src = cvLoadImage("./1.jpg"); //加载待处理图片
if(!src)
return -1;
dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);//初始化dst
cvZero(dst); //把dst像素清零
//---------设置ROI区域,膨胀来去除标志---------//
cvCopy(src, dst);
cvSetImageROI(dst, cvRect(280, 340, 310, 40));
cvDilate(dst, dst, NULL, 3);
cvResetImageROI(dst);
//----------调用填充函数,把蓝色背景转为白色---------//
cvFloodFill(dst, cvPoint(0,0), CV_RGB(255, 255, 255),
cvScalarAll(10),
cvScalarAll(10),
NULL,
4,
NULL);
//----------进一步膨胀标志地方----------//
cvSetImageROI(dst, cvRect(380, 340, 310, 40));
cvDilate(dst, dst, NULL, 3);
cvResetImageROI(dst);
//---------创建显示窗口与图片显示------------//
cvNamedWindow("src");
cvNamedWindow("dst");
cvMoveWindow("src", 60, 60);
cvMoveWindow("dst", 660, 60);
cvShowImage("src", src);
cvShowImage("dst", dst);
cvSaveImage("3.jpg", dst);
cvWaitKey();
//----------销毁所有窗口与释放内存------------//
cvDestroyAllWindows();
cvReleaseImage(&src);
cvReleaseImage(&dst);
return 0;
}
处理好图像如下所示:
如果有侵权麻烦留言,我删除图像,脸上是我划掉的,与代码无关