Qt中实时调取摄像头(含代码)
pro文件
QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++11 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ widget.cpp HEADERS += \ widget.h FORMS += \ widget.ui # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target INCLUDEPATH += D:\opencv450\opencv\build\include INCLUDEPATH += D:\opencv450\opencv\build\include\opencv2 INCLUDEPATH += D:\opencv450\opencv\build\bin INCLUDEPATH += D:\opencv450\opencv\newbuild\install\include LIBS += -LD:\opencv450\opencv\newbuild\install\x64\mingw\bin\ -llibopencv_calib3d450 \ -llibopencv_core450 \ -llibopencv_dnn450 \ -llibopencv_features2d450 \ -llibopencv_flann450 \ -llibopencv_gapi450 \ -llibopencv_highgui450 \ -llibopencv_imgcodecs450 \ -llibopencv_imgproc450 \ -llibopencv_ml450 \ -llibopencv_objdetect450 \ -llibopencv_photo450 \ -llibopencv_stitching450 \ -llibopencv_video450 \ -llibopencv_videoio450 \ #-opencv_videoio_ffmpeg.dll \
widget.h文件
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <opencv2/opencv.hpp> #include <QTimer> using namespace cv; QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private slots: void on_pushButton_clicked(); void video_update(); private: Ui::Widget *ui; Mat video_image; VideoCapture cap; QTimer *label_update; int flag = 0; }; #endif // WIDGET_H
main.cpp
#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
widget.cpp文件
#include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QTimer> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); label_update = new QTimer(this); connect(label_update,&QTimer::timeout,this,&Widget::video_update); } Widget::~Widget() { delete ui; } void Widget::on_pushButton_clicked() { if (flag == 0){ cap.open(0); label_update->start(30); flag++; ui->pushButton->setText("Close"); } else{ label_update->stop(); cap.release(); ui->label->clear(); ui->pushButton->setText("Open"); flag = 0; } } void Widget::video_update() { cap >> video_image; cvtColor(video_image, video_image, COLOR_BGR2RGB); ui->label->setPixmap(QPixmap::fromImage(QImage(video_image.data,video_image.cols,video_image.rows,QImage::Format_RGB888))); }