這是在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;
}
處理好圖像如下所示:
如果有侵權麻煩留言,我刪除圖像,臉上是我劃掉的,與代碼無關