1.效果图
2.代码
cpp
#include "widget.h"
#include <QApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <QImage>
#include <QLabel>
#include <QTimer>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建一个 QLabel 用于显示图像
QLabel label;
label.resize(640, 480); // 可根据需要进行调整
label.show();
// 打开摄像头
cv::VideoCapture capture(0);
if (!capture.isOpened()) {
qDebug("Failed to open camera.");
return -1;
}
// 使用 QTimer 定期更新图像显示
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, [&]() {
cv::Mat frame;
capture >> frame; // 获取一帧图像
if (!frame.empty()) {
// 将 OpenCV 的图像转换为 Qt 的 QImage
QImage image(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888);
image = image.rgbSwapped(); // BGR 转 RGB
// 将 QImage 设置到 QLabel 上显示
label.setPixmap(QPixmap::fromImage(image).scaled(label.size(), Qt::KeepAspectRatio));
}
});
// 每秒更新一次图像显示
timer.start(1000 / 30); // 30 fps
return a.exec();
}