qt5和opencv4.3.0实现打开摄像头并截屏拍照,再将图片灰度化,直方化,边缘检测,怎么写?

 我来答
暮礼学长
2023-05-21 · 贡献了超过137个回答
知道答主
回答量:137
采纳率:0%
帮助的人:4.1万
展开全部

代码如下,觉得有帮助可以采纳下,后面有我在vscode的源代码,可以对照输入测试

#include <QApplication>

#include <QMainWindow>

#include <QPushButton>

#include <QVBoxLayout>

#include <QLabel>

#include <QPixmap>

#include <QTimer>

#include <opencv2/opencv.hpp>

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

MainWindow(QWidget *parent = nullptr)

: QMainWindow(parent)

{

// 创建显示摄像头图像的标签

imageLabel = new QLabel(this);

imageLabel->setAlignment(Qt::AlignCenter);

// 创建按钮

QPushButton *captureButton = new QPushButton("拍照", this);

connect(captureButton, &QPushButton::clicked, this, &MainWindow::captureImage);

// 创建垂直布局并将标签和按钮添加到布局中

QVBoxLayout *layout = new QVBoxLayout;

layout->addWidget(imageLabel);

layout->addWidget(captureButton);

// 创建主窗口并设置布局

QWidget *centralWidget = new QWidget(this);

centralWidget->setLayout(layout);

setCentralWidget(centralWidget);

// 设置定时器,定时更新摄像头图像

QTimer *timer = new QTimer(this);

connect(timer, &QTimer::timeout, this, &MainWindow::updateImage);

timer->start(30); // 每30毫秒更新一次图像

}

private slots:

void updateImage()

{

// 打开摄像头

cv::VideoCapture cap(0);

if (!cap.isOpened())

{

qDebug() << "无法打开摄像头!";

return;

}

// 读取摄像头图像

cv::Mat frame;

cap.read(frame);

cap.release();

// 将OpenCV图像转换为Qt图像,并显示在标签上

QImage qImage(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_BGR888);

QPixmap pixmap = QPixmap::fromImage(qImage);

imageLabel->setPixmap(pixmap.scaled(imageLabel->size(), Qt::KeepAspectRatio));

}

void captureImage()

{

// 获取当前摄像头图像

cv::VideoCapture cap(0);

if (!cap.isOpened())

{

qDebug() << "无法打开摄像头!";

return;

}

cv::Mat frame;

cap.read(frame);

cap.release();

// 转换为灰度图像

cv::cvtColor(frame, frame, cv::COLOR_BGR2GRAY);

// 直方化

cv::equalizeHist(frame, frame);

// 边缘检测

cv::Canny(frame, frame, 50, 150);

// 保存图像

cv::imwrite("captured_image.jpg", frame);

qDebug() << "图片已保存为 captured_image.jpg";

}

private:

QLabel *imageLabel;

};

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MainWindow w;

w.show();

return a.exec();

}

#include "main.moc"

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式