qt界面上显示摄像头视频

       对于摄像头在qt界面上显示,我采用了一种比较偷懒的方法。利用天嵌资料上的usb_camera的源码,结合自己做的qt界面,将两个进程同时运行,就可以达到摄像头视频在qt界面上显示的效果。而在退出这两个进程的时候,要先退出摄像头显示进程,然后再退出qt界面的进程,否则摄像头显示的图像会出现卡屏的现象。在qt界面进程里退出摄像头显示进程,可以在C++程序中调用shell命令,使用system("killall -9 进程名")即可。

为实现实时抓拍的功能,我在网上参考了这么一段代码:

#include
#include
#include

int main(int argc,char* argv[])

{
    QApplication app(argc,argv); 
    QPixmap pixmap;
    pixmap=pixmap.grabWindow(QApplication::desktop()->winId(),10,20,320,240);
    QString pic;
    pic="picture.jpg";
    pixmap.save(pic, "JPG");

    return app.exec(); 
}

 

要使用QApplication::desktop()->winId(),就需要包含#include 头文件,这个例程已经有#include头文件,所以编译不会出错,但是将这段代码移植到自己的工程中,因为没有包含这个头文件,会报错。
        这在PC机生可以实现截屏的功能,但是交叉编译移植到开发板之后,一直打印这种错误:QJpegHandler: unable to write image of format 7。后来发现是在ARM板上不支持JPG的保存格式,于是将图片格式换成PNG格式保存就OK了。

为了能连续抓拍保存不同的图片文件名,就使用如下代码实现:

//int转换成QString
    QString pic;
    QString num = QString::number(pic_i++, 10);
//拼接文件名
    pic="picture"+num+".png";
   pixmap.save(pic, "PNG");

 

其中pic_i是在camera类里面定义的int型私有变量。

       今天西西麻麻要来了,昨晚因为兴奋,有点失眠,此刻困死。外面下雨了,希望她不要被淋湿了……

 

你可能感兴趣的:(QT及linux应用程序)