"#include "video_processor.h"\n\nVideoProcessor::VideoProcessor(QObject *parent) : QObject(parent)\n{\n m_camera = new QCamera(this);\n m_imageCapture = new QCameraImageCapture(m_camera, this);\n\n connect(m_imageCapture, SIGNAL(imageCaptured(int, const QImage&)), this, SLOT(processFrame(int, const QImage&)));\n}\n\nVideoProcessor::~VideoProcessor()\n{\n delete m_imageCapture;\n delete m_camera;\n}\n\nvoid VideoProcessor::startCamera()\n{\n m_camera->start();\n}\n\nvoid VideoProcessor::processFrame(int requestId, const QImage& img)\n{\n emit frameProcessed(img);\n}\n在主函数中,你可以这样调用VideoProcessor类:\n\n#include ""\n#include ""\n#include "video_processor.h"\n\nint main(int argc, char *argv[])\n{\n QCoreApplication a(argc, argv);\n\n VideoProcessor videoProcessor;\n\n QObject::connect(&videoProcessor, &VideoProcessor::frameProcessed, [](const QImage& frame) {\n // 处理每一帧图像\n // 在这里可以使用frame进行图像处理操作,如显示、保存等\n });\n\n videoProcessor.startCamera();\n\n QEventLoop loop;\n QObject::connect(&a, &QCoreApplication::aboutToQuit, &loop, &QEventLoop::quit);\n return loop.exec();\n}\n怎么把frame赋值到cv::Mat格式的dstImage中,并show_onlabel();\n\n为了将 QImage 转换为 cv::Mat 格式的图像并在 label 上显示,请按照以下步骤操作:\n\n1. 包含 OpenCV 库的头文件:\n\ncpp\n#include \"<opencv2/opencv.hpp>\"\n\n\n2. 在 VideoProcessor 类中的 processFrame() 槽函数中,将 QImage 转换为 cv::Mat 格式:\n\ncpp\nvoid VideoProcessor::processFrame(int requestId, const QImage& img)\n{\n cv::Mat srcImage = QImageToCvMat(img);\n cv::Mat dstImage;\n\n // 进行图像处理操作,将结果保存在 dstImage 中\n\n showOnLabel(dstImage); // 在 label 上显示图像\n}\n\n\n3. 实现一个辅助函数 QImageToCvMat(),用于将 QImage 转换为 cv::Mat:\n\ncpp\ncv::Mat QImageToCvMat(const QImage& image)\n{\n cv::Mat mat;\n switch (image.format())\n {\n case QImage::Format_RGB888:\n mat = cv::Mat(image.height(), image.width(), CV_8UC3, const_cast<uchar*>(image.bits()), image.bytesPerLine());\n cv::cvtColor(mat, mat, cv::COLOR_RGB2BGR); // 如果需要将 RGB 格式转换为 BGR 格式\n break;\n\n case QImage::Format_Grayscale8:\n mat = cv::Mat(image.height(), image.width(), CV_8UC1, const_cast<uchar*>(image.bits()), image.bytesPerLine());\n break;\n\n // 其他 QImage 格式的处理方式\n\n default:\n qWarning() << \"Unsupported image format\" ;\n break;\n }\n\n return mat;\n}\n\n\n4. 实现一个 showOnLabel() 函数,用于在 label 上显示图像:\n\ncpp\nvoid VideoProcessor::showOnLabel(const cv::Mat& image)\n{\n cv::cvtColor(image, image, cv::COLOR_BGR2RGB); // 将 BGR 格式转换为 RGB 格式\n\n QImage qImage(image.data, image.cols, image.rows, image.step, QImage::Format_RGB888);\n QPixmap pixmap = QPixmap::fromImage(qImage);\n\n // 在 label 上显示图像\n // 假设 label 对象的名称为 labelImage\n labelImage->setPixmap(pixmap.scaled(labelImage->size(), Qt::KeepAspectRatio));\n}\n\n\n然后,你可以在主函数中继续使用 VideoProcessor 类,并在 lambda 函数中调用 showOnLabel() 函数来显示图像。\n\n**注意:**在使用 OpenCV 库之前,请确保已正确配置和安装了 OpenCV 库,并在项目文件中添加了正确的 include 路径和链接库。

Qt 和 OpenCV 实战:摄像头图像实时处理和显示

原文地址: https://www.cveoy.top/t/topic/pPKV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录