1.主要函数
代码 cvCopy(cvQueryFrame( pCapture ),dstImg,bg_model->foreground);//根据二值化前景得到源图像中的部分
voidcvSetImageROI(IplImage* image,CvRect rect);
voidcvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );
对于cvSetImageROI中参数只能是rect矩形,不太灵活,可以用于手动标注或者自动标注矩形区域。(做个视频标注工具中可以用用)
对于cvCopy就很灵活了。依照参数mask来获得兴趣区域。
一般情况下,我们都是根据源图像或源视频,提取其中感兴趣或重要的区域进行研究。这时就能用到cvCopy。
特别是做前景提取的时候,提取出的前景图像往往都是二值化的。但我们希望要处理的是源图像中的包含颜色等信息的兴趣区域图像。
这时就可以用cvCopy。
举例如下,由高斯背景建模获得前景图,再由前景获得源图像的区域:
#include "stdafx.h"
#include <cv.h>
#include <cvaux.h>
#include <highgui.h>
CvGaussBGStatModelParams param =
{
150, /* int win_size, Learning rate; alpha = 1/CV_GBG_WINDOW_SIZE. Defaults to 200. */
5, /* int n_gauss, = K = number of Gaussians in mixture. Defaults to 5. Ranges from 3~5 */
0.6, /* double bg_threshold, Threshold sum of weights for background test. Defaults to 0.7. */
2.5, /* double std_threshold, lambda=2.5 is 99%. Defaults to 2.5. Shouldn't be changed!! */
15.f, /* double minArea. Defaults to 15.f. */
0.05, /* double weight_init. Defaults to 0.05. */
900, /* double variance_init, CV_BGFG_MOG_SIGMA_INIT. Defaults to 30*30. the mean is 0. */
/* the method is an adaptive method, so after win_size frames, the result will just be fine. */
}, *params = ¶m;
int main()
{
CvCapture* pCapture = cvCaptureFromCAM( 0 );//
CvBGStatModel* bg_model =cvCreateGaussianBGModel(cvQueryFrame( pCapture ), params);//
cvNamedWindow("video");
cvNamedWindow( "foreground");
cvNamedWindow("colorROI");
IplImage *dstImg = cvCreateImage(cvGetSize(cvQueryFrame( pCapture )),IPL_DEPTH_8U,3);//
while( ( cvWaitKey(1)) != 27)
{
cvUpdateBGStatModel( cvQueryFrame( pCapture ), bg_model ); //更新高斯背景模型
bg_model->foreground->origin = 1;//使图像正常显示,不然会倒立
cvCopy(cvQueryFrame( pCapture ),dstImg,bg_model->foreground);//根据二值化前景得到源图像中的部分
dstImg->origin = 1;//使图像正常显示,不然会倒立
cvShowImage("video",cvQueryFrame( pCapture ));//
cvShowImage("foreground", bg_model->foreground );//
cvShowImage("colorROI",dstImg);//
}
cvReleaseCapture( &pCapture );
cvDestroyWindow( "foreground" );
cvReleaseImage(&dstImg);
}
代码 cvCopy(cvQueryFrame( pCapture ),dstImg,bg_model->foreground);//根据二值化前景得到源图像中的部分
dstImg就是源图像的兴趣区域。