// 9-1.cpp : 定義控制台應用程式的進入點。///*===========================================================================名稱:9-1時間:2013.07.04說明:============================================================================*/#include "stdafx.h"#include "cv.h"#include "highgui.h"#include "cxcore.h"int _tmain(int argc, _TCHAR* argv[]){//聲明三個映像指標,分別指向載入的映像、轉化為單通道映像、處理好映像IplImage* pFrame = NULL; IplImage* pFrImg = NULL; IplImage* pBkImg = NULL; //聲明三個矩陣變換指標 CvMat* pFrameMat = NULL; CvMat* pFrMat = NULL; CvMat* pBkMat = NULL; int nFrmNum = 0;//建立三個顯示映像的視窗cvNamedWindow("video", 1); cvNamedWindow("background",1); cvNamedWindow("foreground",1); //設定顯示視窗的位置座標 cvMoveWindow("video", 30, 0); cvMoveWindow("background", 360, 0); cvMoveWindow("foreground", 690, 0); //為pFrame載入本地映像,並初始化映像指標pBkImg、pFrImgpFrame = cvLoadImage("D://12.jpg");pBkImg = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);pFrImg = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);//初始化三個矩陣變換函數pBkMat、pFrMat、pFrameMatpBkMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);pFrMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);//色彩空間轉化,變為灰階映像cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY); //把載入的映像轉化為矩陣cvConvert(pFrImg, pFrameMat);cvConvert(pFrImg, pFrMat); cvConvert(pFrImg, pBkMat); //高斯濾波cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 0, 0,0); //函數cvAbsDiff計算兩個數組差的絕對值cvAbsDiff(pFrameMat, pBkMat, pFrMat);//映像二值化cvThreshold(pFrMat, pFrImg, 20, 255, CV_THRESH_BINARY); //用來更新移動平均cvRunningAvg(pFrameMat, pBkMat, 0.003, NULL); //把矩陣轉化為映像cvConvert(pBkMat, pBkImg);//映像顯示cvShowImage("video", pFrame); cvShowImage("background", pBkImg); cvShowImage("foreground", pFrImg); cvWaitKey(0);//關閉所有視窗 cvDestroyAllWindows(); //釋放映像記憶體與矩陣cvReleaseImage(&pFrImg); cvReleaseImage(&pBkImg); cvReleaseMat(&pFrameMat); cvReleaseMat(&pFrMat); cvReleaseMat(&pBkMat);return 0;}
1.聲明三個映像指標與三個矩陣
2.初始化三個映像指標與三個矩陣
3.色彩空間的轉換
4.把初始化的映像指標轉化為矩陣指標
5.高斯濾波
6.求兩個矩陣之差輸出
7.輸出映像的二值化
8.更新移動平均
9.把矩陣轉化為映像指標
10.映像顯示