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循环这样好吗?
QImage *image;在构造的时候、使用了你提供的内存imgData。析构的时候并不释放该内存块。 所以,你的 IplImage *dst,是不是需要自己去释放啊。######cvReleaseImage(&dst); 已经成功,谢谢了######自己顶一下,搞了视频很长时间了,三路无延时低消耗也搞出来来了,不过是在VS2008下面的QT4.8.5,用的CamerDS,但是直接在QTCreator下调用的话报很多错误,头文件找不到,希望有这方面的经验的老手们不吝赐教,也为后来人指明道路###### @Ray
###### @吥楛糖 求指导,谢谢######
QImage *image;在构造的时候、使用了你提供的内存imgData。析构的时候并不释放该内存块。 所以,你的 IplImage *dst,是不是需要自己去释放啊。
QImage *image;在构造的时候、使用了你提供的内存imgData。析构的时候并不释放该内存块。 所以,你的 IplImage *dst,是不是需要自己去释放啊。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。