gpt4 book ai didi

c - 我的 Opencv 应用程序处理速度非常慢

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:01 27 4
gpt4 key购买 nike

我正在构建一个 OpenCV 应用程序,该应用程序从相机捕获视频并在移除背景后将其覆盖在另一个视频上。

我无法达到合理的速度,因为它以大约 1 fps 的速度播放输出,而我的背景移除工作以 3 fps 的速度进行。

有没有办法以正常速度显示背景视频并以 3fps 叠加处理后的视频?

我试着注释掉我的代码,我意识到问题主要出在渲染部分本身。我尝试将视频与我的网络摄像头提要一起显示,我注意到在使用 openCV 显示时,实际 fps 和视频的 fps 有所下降。

这里是示例代码:

 void main()
{
CvCapture* capture, *Vcap;
capture = cvCaptureFromCAM(0);
if(!capture)
{
printf("Video Load Error");
}

Vcap = cvCaptureFromAVI("bgDemo.mp4");
//printf("\nEntered BGR");
if(!Vcap)
{
printf("Video Load Error");
}

while(1)
{

IplImage* src = cvQueryFrame(Vcap);
if(!src)
{
Vcap = cvCaptureFromAVI("bgDemo.mp4");
continue;
}
IplImage* bck1 = cvCreateImage(cvGetSize(src),8,3);
cvResize(src,bck1,CV_INTER_LINEAR);

cvShowImage("BCK",bck1);
cvWaitKey(1);
}
}

最佳答案

主要问题 是您在循环的每次迭代中分配新图像,而没有在循环结束时释放它。换句话说,你有一个漂亮的内存泄漏

更好的方法是在循环开始之前简单地抓取视频帧。这将使您只需创建一次大小合适的 bck1

你的代码还有其他问题,我在下面分享了一个修复版本,确保你注意每一行代码,看看有什么变化。我还没有时间测试它,但我相信你会弄明白的:

int main()
{
// I know what you are doing, just one capture interface is enough
CvCapture* capture = NULL;

capture = cvCaptureFromCAM(0);
if(!capture)
{
printf("Ooops! Camera Error");
}

capture = cvCaptureFromAVI("bgDemo.mp4");
if(!capture)
{
printf("Ooops! Video Error");
// if it failed here, it means both methods for loading a video stream failed.
// It makes no sense to let the application continue, so we return.
return -1;
}

// Retrieve a single frame from the camera
IplImage* src = cvQueryFrame(capture);
if(!src)
{
printf("Ooops! #1 cvQueryFrame Error");
return -1;
}

// Now we can create our backup image with the right dimensions.
IplImage* bck1 = cvCreateImage(cvGetSize(src),src->depth, src->nChannels);
if(!bck1)
{
printf("Ooops! cvCreateImage Error");
return -1;
}

while(1)
{
src = cvQueryFrame(capture);
if(!src)
{
printf("Ooops! #2 cvQueryFrame Error");
break;
}

cvResize(src, bck1, CV_INTER_LINEAR);

cvShowImage("BCK",bck1);
cvWaitKey(10);
}

cvReleaseImage( &bck1 ); // free manually allocated resource

return 0;
}

这些修复应该会大大加快您的应用程序的速度。

关于c - 我的 Opencv 应用程序处理速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13229786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com