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;
}
}