首页| 论坛| 消息

标题:Qt用QLabel来显示摄像头,CPU占用率过高的问题
作者:honami520
日期:2015-05-11 13:58
内容:

我用的是linux,板子是全志A20的双核板子,CPU是1GHZ双核,内存512MB。用的摄像头是普通UVC摄像头。用ffmepg对摄像头数据编解码都OK,速度还挺快,结果被Qt的显示给拦住了。
我是V4L2读取一帧数据,然后YUV转换成RGB,然后转换成QImage显示到QLabel上面,定时器开的是40ms,40ms读取一帧数据,显示出来。在PC上面跑得好好的东西,到了开发板上面,就不行了。根据打印信息,定时的时间间隔编程60-70ms。然后在定时器里面执行的时间还是挺快的,只要5-8ms的时间。看来这个时间是在定时器外面,Qt自己运行的里面被消耗掉了的。
下面是我的定时服务程序代码
video->get_frame((void **)&pp, &pp_len);
//摄像头内部图片指针还原
video->unget_frame();
convert_yuv_to_rgb_buffer(pp, pf, 320, 240);
ui->label->setPixmap(QPixmap::fromImage(*frame, Qt::AutoColor));
经过研究发现,只要执行了ui->label->setPixmap这句话,定时器间隔就变得不准,系统资源被严重消耗。问下各位,如果做过在开发板上面用Qt来显示摄像头的,有没有解决办法。或者有没有其他方法可以让摄像头的显示变快点的。


#1 [honami520 05-11 15:45]
难道大家都不在板子上面做摄像头的应用吗?这个应该很常见啊,为什么一个回复的都没有啊
#2 [shanglei 05-11 22:49]
用这种方式显示确实比较 占用资源 ,在window 上面我们用的gdi 渲染 就完全Ok 了 linux上面也应该有类似gdi 这样的绘图函数吧
#3 [hsl17 05-13 13:43]
A20有linux资料吗?
#4 [漂泊的孩子6 06-04 13:20]
我用QT5做的摄像头视频采集,v4l2架构,可是label什么也不显示。能帮忙看看吗?谢谢啊!代码也是从网上找的。
ProcessImage::ProcessImage(QWidget *parent):QWidget(parent)
{
pp = (unsigned char *)malloc(640 * 480/*QWidget::width()*QWidget::height()*/* 3 * sizeof(char));
painter = new QPainter(this);
frame = new QImage(pp,640,480,QImage::Format_RGB888);
// frame = new QPixmap(640,320);
label = new QLabel();
vd = new VideoDevice(tr("/dev/video0"));
connect(vd, SIGNAL(display_error(QString)), this,SLOT(display_error(QString)));
rs = vd->open_device();
if(-1==rs)
{
QMessageBox::warning(this,tr("error"),tr("open /dev/dsp error"),QMessageBox::Yes);
vd->close_device();
}
rs = vd->init_device();
if(-1==rs)
{
QMessageBox::warning(this,tr("error"),tr("init failed"),QMessageBox::Yes);
vd->close_device();
}
rs = vd->start_capturing();
if(-1==rs)
{
QMessageBox::warning(this,tr("error"),tr("start capture failed"),QMessageBox::Yes);
vd->close_device();
}
if(-1==rs)
{
QMessageBox::warning(this,tr("error"),tr("get frame failed"),QMessageBox::Yes);
&nbs ..
#5 [hsl17 06-19 15:33]
用软件编码当然慢

<< 1 2 3 >> (1/4)

回复 发表
主题 版块