windows下QT读取摄像头已经成功,但是内存消耗很大

DavidWong8383 发布于 2013/09/04 10:03
阅读 1K+
收藏 1
Qt
IplImage *pFrame;
 CvCapture* pCapture;
 pFrame = NULL;
 pCapture = cvCreateCameraCapture(-1);
 while(1)
 {
 
 pFrame=cvQueryFrame(pCapture);
 if(!pFrame)
 break;
 cvShowImage("video",pFrame);
 char c=cvWaitKey(33);
 if(c==27)break;
 }
 cvReleaseImage(&pFrame);
 cvReleaseCapture(&pCapture);
以上是参考代码,以下是自己想办法
 
void
Widget ::paintEvent ( QPaintEvent *)
{
 
 pFrame=cvQueryFrame(pCapture);
 IplImage *dst = 0; //目标图像指针
 //float scale = 0.5; //缩放倍数为0.618倍
 CvSize dst_cvsize; //目标图像尺寸
 dst_cvsize.width = (pFrame->width)/2; //目标图像的宽为源图象宽的scale
 dst_cvsize.height = (pFrame->height)/2; //目标图像的高为源图象高的scale倍
 dst = cvCreateImage( dst_cvsize, pFrame->depth, pFrame->nChannels); //构造目标图象
 cvResize(pFrame, dst, CV_INTER_LINEAR); //缩放源图像到目标图像
 QImage *image;
 cvCvtColor(dst,dst,CV_BGR2RGB);
 uchar *imgData=(uchar *)dst->imageData;
 image=new QImage(imgData,dst->width,dst->height,QImage::Format_RGB888);
 ui->label_8->setPixmap(QPixmap::fromImage(*image));
 delete image;
 
} 
在这个事件里面写的,运行下,视频可以读出来,但是内存消耗很大,每秒差不多1000K左右,怎么解决呢?
我打算开个线程,run里面直接while循环这样好吗?
加载中
1
S
SidWang
 QImage *image;在构造的时候、使用了你提供的内存imgData。析构的时候并不释放该内存块。
所以,你的 IplImage *dst,是不是需要自己去释放啊。
DavidWong8383
DavidWong8383
cvReleaseImage(&dst); 已经成功,谢谢了
0
DavidWong8383
DavidWong8383
自己顶一下,搞了视频很长时间了,三路无延时低消耗也搞出来来了,不过是在VS2008下面的QT4.8.5,用的CamerDS,但是直接在QTCreator下调用的话报很多错误,头文件找不到,希望有这方面的经验的老手们不吝赐教,也为后来人指明道路
0
0
DavidWong8383
DavidWong8383

引用来自“SidWang”的答案

 QImage *image;在构造的时候、使用了你提供的内存imgData。析构的时候并不释放该内存块。
所以,你的 IplImage *dst,是不是需要自己去释放啊。
有句话说的好啊,越是擅长的地方越容易被坑。。
0
DavidWong8383
DavidWong8383

引用来自“DavidWong8383”的答案

引用来自“SidWang”的答案

 QImage *image;在构造的时候、使用了你提供的内存imgData。析构的时候并不释放该内存块。
所以,你的 IplImage *dst,是不是需要自己去释放啊。
有句话说的好啊,越是擅长的地方越容易被坑。。
就是这个原因
返回顶部
顶部