如何在QT中将Qwidget类提升为USB(uvc)摄像头类的使用

为什么不用QT自带的摄像头类而自己提升一个摄像头类呢?

因为现在市场上大部分用的都是UVC摄像头, 因为UVC摄像头 价格低,使用方便;免驱动安装;硬件接线少
USB接口通用性强。UVC是一种摄像头协议,USB摄像头基本都是UVC协议的 很多商家都说摄像头”免驱”,并不是真正免驱动,只不过是系统自带这个UVC驱动而已,所以它们敢说”免驱”. 因为UVC摄像头使用非常非常非常广泛,所以很多系统都集成了UVC驱动。

提升需要哪些资料支撑

此次我们使用的是usbcamera库来操作摄像头:
• usbcamera库非常适合操作uvc摄像头
• usbcamera库需要ffmpeg的支持
• usbcamera的比qt自带的QCamera类更方便
usbcanmera库和ffmpeg资源包可以去官网下载,不想下载的小伙伴可以私信我博客找我获取也可。

arm环境ffmpeg库交叉编译

首先我们先拿到ffmpeg的压缩包。
ffmpeg在这里插入图片描述
然后上传到ubuntu,这个是 ffmpeg的源码,我们要把它编译成库。
首先解压压缩包:

tar -xf ffmpeg-3.4.5.tar

解压之后我们要进入到解压文件中进行编译成库:

cd ffmpeg-3.4.5/

然后打开上面截图里面的文档里面有编译方法:
在这里插入图片描述
一、第(1)步编译源码,但是需要根据我们的自己的编译器将配置源码的命令进行修改,需要修改的地方我圈出来:
在这里插入图片描述
比如我自己的编译器是“ arm-cortexa9-linux-gnueabihf- ”则编译源码的命令为:

./configure --cross-prefix=arm-cortexa9-linux-gnueabihf- --enable-cross-compile --target-
os=linux --cc=arm-cortexa9-linux-gnueabihf-gcc --arch=arm --prefix=host --enable-shared --
disable-static  --disable-doc --disable-x86asm --enable-ffplay

记住一定是根据自己的编译器名字进行修改。
二、然后就是按照编译步骤进行第(2)步 make,make是编译的意思。在这里可能会比较久,大概15分钟,电脑配置高可能会快一点。
三、编译完成之后就进行第(3)步,make install,make install就是执行 install 这个目标,也是就我们常说的安装。

usbcamera库的使用

usbcamera库的大概使用方法:
① 提升QWidget成USBCameraWidget
② 设置摄像头节点,采样速率
③ 打开摄像头
就这么简单。
但是
一、首先我们要获取usbcame库,不想下载的小伙伴可以私信我获取。
在这里插入图片描述
二、将库放到我们要使用摄像头的QT工程里面去并解压。

tar -xf

三、解压完成后我们进入到usbcamer文件夹就要注意了,

ls

就会看到有两个文件夹分别是 include和lib 如图:
在这里插入图片描述
(1)拷贝ffmpeg 下的 include到usbcamera下的include。
此时的include里面是没有东西的,我们可以进去看一下
在这里插入图片描述
include里面是用来放头文文件的,所以我们要把之前ffmpeg编译生的include下文件拷贝过来;
路径在ffmpeg/host下,如果不是很明白请看图操作(前面两个cp只是tab查看路径,最后那个才是真正的copy):
在这里插入图片描述
(2)拷贝ffmpeg 下的lib到usbcamera下的lib。
操作几乎和拷贝include头文件一致,直接上图看具体步骤:
在这里插入图片描述
四、把usbcamera库添加到我们的工程。
首先我先给你们看一下usbcamera下的pri文件,我们只要把 ffmpeg.pri 加到我们的工程即可。
在这里插入图片描述
如何加pri?QT进入到 .pro 文件下输入代码:

include($$PWD/usbcamera/ffmpeg.pri)

添加了pri终于来到了我们要提升的环节,具体步骤如下:
首先右键点击要提升的Qwidget,点击提升为:
在这里插入图片描述
然后我们要找到我们要提升的类名复制下来,看到没他也是继承Qwidget父类而来:
在这里插入图片描述
然后复制到提升窗口那里的提升类的名称框里,但是这时会自动生成头文件,注意这是一个坑:
在这里插入图片描述
我们要去看他的头文件是否真的就是这个名称,机智的我发现果然不是,现在我想到放逐大帝的一句话:拐的一批!

在这里插入图片描述
所以正确的提升应该是下面这样的:
在这里插入图片描述
五、这时候就可以去设置采样频率以及摄像头节点啦。
我们只要在构造函数里输入这两句神奇的代码就搞定了:

ui->camear->setCameraName("/dev/video15");
ui->camear->setInterval(80);

注意:你的usbcamera窗口类名可能不是camera根据自己窗口类名修改,然后你的摄像头驱动节点也要自己查看修改即 “/dev/video15”。
六、然后就是在你想打开或者关闭的地方打开或者关闭啦。

 ui->camear->open();//打开
 ui->camear->open();//关闭

七、还可以有截图拍照功能哦。
原理我就不多讲了,直接上代码:

 connect(ui->camera,SIGNAL(receiveImage(QImage)),this,SLOT(slotCremasend(QImage)));  //链接信号槽
void formcamera::slotCremasend(QImage image)
{
    cramestatus = 1;
    pixmap = QPixmap::fromImage(image);

}
 QPixmap pix;
    if(cramestatus == 0){

          qDebug("camera is not start");
          return ;
    }

    pix = pixmap;

    QString filename = QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zz");

    filename += ".jpg";

    QString path = QFileDialog::getExistingDirectory(this,tr("选择一个文件夹"), "/", 
   		QFileDialog::ShowDirsOnly|QFileDialog::DontResolveSymlinks);//和上面是一句,这是形参

    qDebug()<< "path=" << path +"/" +filename;

    if(pix.save(path +"/" +filename) == false){

        qDebug("pic save error");
    }

好了,整体的uvc摄像头的使用就到这里啦,感谢观看,如果有什么疑问或者错误欢迎私聊小编改正,如果觉得有帮助可以点赞收藏,需要资源也可以私聊小编下载哦。谢谢啦!

  • 3
    点赞
  • 14
    收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初出江湖的小码农

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值