视频文件,检测时只对指定区域进行检测,该怎么处理
视频文件,检测时只对指定区域进行检测
cvSetImageROI
在运动物体跟踪例程中,想指定一矩形区域,只检测该区域,但是
cvSetImageROI(pImg, cvRect(x,y,width,height));
pTracker->Process(pImg, pMask);//???该地方不对,我使用cvSetImageROI 影响到了那个地方,需要如何匹配??
------解决方案--------------------
cvSetImageROI函数改变IplImage结构体中的roi字段,
一个没有ROI区域的图像其roi指针=NULL,
这个和你Process函数的写法是有关的,如果自己写函数的话需要考虑roi是否=NULL的,
我倒也没有仔细查看过opencv源代码是如何实现的,
我自己写处理带有roi区域的图像,如果性能要求不高的话,就是先生成一个工作图像,然后在工作图像上处理。
例如针对你的问题就是:
IplImage *pwkrImg
if (pImg->roi) {
pwkrImg=cvCreateImage(cvGetSize(pImg),pImg->depth,pImg->channel);
cvCopy(pwkrImg,pImg);
} else pwkrImg=pImg;
然后再
pTracker->Process(pwkrImg,pMask);
最后记得析构
if (pImg->roi) cvReleaseImage(&pwkrImg);
cvSetImageROI
在运动物体跟踪例程中,想指定一矩形区域,只检测该区域,但是
cvSetImageROI(pImg, cvRect(x,y,width,height));
pTracker->Process(pImg, pMask);//???该地方不对,我使用cvSetImageROI 影响到了那个地方,需要如何匹配??
------解决方案--------------------
cvSetImageROI函数改变IplImage结构体中的roi字段,
一个没有ROI区域的图像其roi指针=NULL,
这个和你Process函数的写法是有关的,如果自己写函数的话需要考虑roi是否=NULL的,
我倒也没有仔细查看过opencv源代码是如何实现的,
我自己写处理带有roi区域的图像,如果性能要求不高的话,就是先生成一个工作图像,然后在工作图像上处理。
例如针对你的问题就是:
IplImage *pwkrImg
if (pImg->roi) {
pwkrImg=cvCreateImage(cvGetSize(pImg),pImg->depth,pImg->channel);
cvCopy(pwkrImg,pImg);
} else pwkrImg=pImg;
然后再
pTracker->Process(pwkrImg,pMask);
最后记得析构
if (pImg->roi) cvReleaseImage(&pwkrImg);