qt读取摄像头

发布时间 2023-10-16 23:22:10作者: blackstrom
Qt中实时调取摄像头(利用OpenCV)_opencv获取网络摄像头 qt_Loading_create的博客-CSDN博客

C++版本
#include <opencv2/opencv.hpp>
#include "mainwindow.h"
using namespace std;
using namespace cv;
#undef main
 int  main(){
    Mat image;
    VideoCapture cap(0);
    //cap.open(0);
    while (1){
        cap>>image;
        imshow("1232",image);
        if(waitKey(30)>=0) break;
    }
    return 0;
}

opencv版本
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <opencv2/opencv.hpp>
#include <QTimer>
#include <QLabel>
#include <QPushButton>

using namespace cv;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();


private:
    Mat video_image;
    VideoCapture cap;
    QTimer *label_update;
    int flag=0;
    QLabel *label;
    QPushButton *pushButton;
private slots:
    void pushButtonClicked();
    void video_update();
};

#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0,0,800,480);
    label=new QLabel(this);
    label->setGeometry(0,0,300,300);
    label->setStyleSheet("QLabel { "> #f8f8f8; border-width: 2px; border-style: solid; border-color: #4B91E5; }");

    pushButton=new QPushButton(this);
    pushButton->setGeometry(0,320,100,30);
    pushButton->setText("打开摄像头");

    label_update=new QTimer();

    connect(label_update,SIGNAL(timeout()),this,SLOT(video_update()));
    connect(pushButton,SIGNAL(clicked()),this,SLOT(pushButtonClicked()));
}

MainWindow::~MainWindow()
{

}

void MainWindow::video_update()
{
    cap>>video_image;
    cvtColor(video_image,video_image,COLOR_BGR2RGB);
    label->setPixmap(QPixmap::fromImage(QImage(video_image.data,video_image.cols,video_image.rows,QImage::Format_RGB888)));

}

void MainWindow::pushButtonClicked()
{
    if(flag==0)
    {
        cap.open(0);
        label_update->start(30);
        flag++;
        pushButton->setText("CLOSE");

    }
    else
    {
        label_update->stop();
        cap.release();
        label->clear();
        pushButton->setText("open");
        flag=0;
    }
}