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编译版本一致。