-我们项目使用的是大恒相机水星系列的MER-139-210U3C

qt opencv多线程关闭摄像头 qt调用外部摄像头_ubuntu

首先,我之前在界面上是可以调用本地摄像头的,具体程序如下

#include "infra.h"
#include "ui_infra.h"
#include <QTimer>
#include<QString>
#include <QDebug>
#include<opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<QPainter>
#include<QPixmap>

infra::infra(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::infra)
{
    ui->setupUi(this);
    this->setWindowTitle("实时红外视图显示");
    this->resize(QSize(1000,800));
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(importFrame()));
}

void infra::importFrame()
{
    capture >> frame;
    Mat output;
    cvtColor(frame, output, CV_BGR2RGB);//only RGB of Qt
    QImage srcQImage = QImage((uchar*)(output.data), output.cols, output.rows, QImage::Format_RGB888);
    srcQImage = srcQImage.scaled(ui->label->width(),ui->label->height());
    ui->label->setPixmap(QPixmap::fromImage(srcQImage));
    ui->label->resize(srcQImage.size());
    ui->label->show();
}

void infra::on_displayButton_clicked()
{
    if (isCamera)
    {
        capture.open(1);
    }
    else
    {
        bool ok = capture.open("/home/wwf0528/Qt/untitled6/520.mp4");
        qDebug()<<ok;
    }
    timer->start(40);// Start timing, Signal out when timeout
}

void infra::on_stopButton_clicked()
{
    timer->stop();
    capture.release();
}

void infra::on_comboBox_currentIndexChanged(int index)
{
    if (index)//此处待确定
        isCamera = 1;
    else
        isCamera = 0;
}

/*void infra::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPixmap pix;
    pix.load(":/66.jpeg");
    painter.drawPixmap(this->rect(),pix);
}*/

infra::~infra()
{
    delete ui;
}

这里面可以看到cpture.open()的括号里面是1,这时候是调用插在电脑的usb接口上的无驱摄像头,当把里面的数字改成0之后就可以调用本地摄像头。
但是大恒的工业相机是有驱的摄像头,因此不能按照以上程序运行。

下面介绍大恒水星系列的有驱摄像头在QT中如何调用

首先,我们要下载摄像头的驱动,这个可以在大恒官网进行下载https://www.daheng-imaging.com/ 进入官网之后

qt opencv多线程关闭摄像头 qt调用外部摄像头_linux_02


选择下载中心中的软件下载,要进行账号的注册和登录

qt opencv多线程关闭摄像头 qt调用外部摄像头_linux_03


选用产品为大恒相机。操作系统为Linux,使用类型为…USB3.0.

这里的信息必须要正确,选择下载最新版的驱动

我之前因为下载的不是最新的驱动,导致缺少一部分库,并且存在采集图像的过程中有卡顿的现象

下载好安装包之后,在Ubuntu系统下进行解压安装

qt opencv多线程关闭摄像头 qt调用外部摄像头_qt_04


Galaxy_Linux-x86_Gige-U3_32bits-64bits_1.2.2106.9091/Galaxy_camera/bin在这个文件夹下选择

qt opencv多线程关闭摄像头 qt调用外部摄像头_#include_05


点击进行运行,进入大恒相机自带的驱动,在这个驱动中可以调节相机

qt opencv多线程关闭摄像头 qt调用外部摄像头_linux_06


Galaxy_Linux-x86_Gige-U3_32bits-64bits_1.2.2106.9091/Galaxy_camera/sample /GxViewer在这个目录下有我们在QT中开发所需要的demo,从里面选择出需要用到的demo

qt opencv多线程关闭摄像头 qt调用外部摄像头_linux_07


需要用到的如上图所示,

然后按照正常流程进行UI界面的设计,主要包括打开关闭设备,开始和结束录像

qt opencv多线程关闭摄像头 qt调用外部摄像头_qt opencv多线程关闭摄像头_08


点击打开设备 ,再点击开始摄像

qt opencv多线程关闭摄像头 qt调用外部摄像头_#include_09


功能还在完善,整个项目搞完之后,会公布源代码。