QT 使用OpenCV涉及图像读取处理显示

1.环境配置(关键步骤)

在.pro文件中添加OpenCV库路径(根据安装路径调整):

#windows 示例

INCLUDEPATH += D:/opencv/build/x64/mingw/lib -lopencv_core453 -lopencv_imgproc453 -lopencv_highgui453 -lopencv_imgcodecs453

#Linux 示例

 INCLUDEPATH += /usr/local/include/opencv4

LIBS += `pkg-config -libs opencv4`

2.基本图像处理

在Qt窗口中加载并显示OpenCV处理的图像:

#include <QMainWindow>

#include <QLabel>

#include <QPixmap>

#include <QImage>

#include <opencv2/opencv.hpp>

class MainWindow : public QMianWindow{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr) : QMainWindow(parent)    
    {
        //步骤1:用OpenCV读取图像
        cv::Mat cvImage = cv:imread("test.jpg");//读取图片
        if(cvImage.empty()) return;

        //步骤2:图像处理(示例:转灰度图+边缘检测)
        cv::Mat gray,edges;
        cv::cvtColor(cvImage, gray, cv::COLOR_BGR2GRAY);
        cv::Canny(gray, edges, 100, 200);

        //步骤3:将OpenCV图像转为Qt格式
        QImage qtImage(edges.data,
                       edges.cols,
                       edges.rows,
                       edges.step,
                       QImage::Fromat_Grayscale8);//灰度图格式

        //步骤4:在QLabel中显示
        QLabel *label = new QLabel(this);
        label->setPixmap(QPixmap::fromImage(qtImage);
        setCentralWidget(label);
    }
}

3.常见问题

颜色通道转换

OpenCV默认是BGR格式,Qt需要转为RGB:

cv::cvtColor(cvImage, gray, cv::COLOR_BGR2RGB);
QImage qtImage(edges.data,
               edges.cols,
               edges.rows,
               edges.step,
               QImage::Fromat_RGB888);

内存管理

确保OpenCV图像在使用期间不被释放:

//深拷贝数据避免悬挂指针
QImage qtImage = QImage(rgbImage.data,
                        rgbImage.cols,
                        rabImage.rows,
                        QImage::Fromat_RGB888).copy();

4.实时摄像头处理

#include <opencv2/videoio.hpp>

//在Qt定时器中捕获摄像头帧
void MainWindow::processFrame(){
    cv::Mat frame;
    cap >> frame; //从摄像头捕获
    if(frame.empty())
    return;

    cv::cvtColor(frame, frame, cv::COLOR_BGR2RGB);
    QImage img(frame.data, frame.cols, frame.rows, QImage::Format_RGB888);
    ui->label->setPixmap(QPixmap::fromImage(img));
}

//初始化摄像头
cv::VideoCapture cap(0);
QTimer *timer - new QTimer(this);
connect(timer, &QTimer::timeout, this, &MainWindow::processFrame);
timer->start(30); //30ms更新

5.部署注意事项

动态库: 发布程序时需包含OpenCV的DLL(windows)或.so(Linux)。

版本匹配:确保Qt编译器(如MinGW/MSVC)与OpenCV编译版本一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值