关于兴趣区域ROI的一点总结

1.主要函数

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就是源图像的兴趣区域。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值