在Windows系统Qt Creator中使用OpenCV编译报错求助
Qt Creator + OpenCV编译失败:
imread调用报错的排查与修复 咱们先从你给出的.pro文件和测试代码入手,拆解几个最可能导致编译失败的点,一步步解决问题:
首先贴出你提供的.pro文件(方便对照):
QT += core gui QT += testlib greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++11 DEFINES += QT_DEPRECATED_WARNINGS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ editor.cpp \ image.cpp \ linked_list.cpp \ main.cpp \ mainwindow.cpp \ tests.cpp HEADERS += \ editor.h \ image.h \ linked_list.h \ mainwindow.h \ node.h FORMS += \ editor.ui \ mainwindow.ui INCLUDEPATH += \ D:/boost # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target win32:CONFIG(release, debug|release): LIBS += -LD:/opencv/build/x64/vc15/lib/ -lopencv_world420 else:win32:CONFIG(debug, debug|release): LIBS += -LD:/opencv/build/x64/vc15/lib/ -lopencv_world420d else:unix: LIBS += -LD:/opencv/build/x64/vc15/lib/ -lopencv_world420 INCLUDEPATH += D:/opencv/build/include DEPENDPATH += D:/opencv/build/include
可能的错误原因及修复步骤
1. 头文件缺失或命名空间未正确使用
你的测试代码写了cv::Mat img = imread("test.png");——这里的imread没有加cv::前缀,而且如果代码里没包含对应头文件,编译器根本找不到这个函数。
修复方法:
在调用imread的.cpp文件开头添加:
// 要么包含完整的OpenCV头文件 #include <opencv2/opencv.hpp> // 要么更精准地包含需要的模块(推荐) #include <opencv2/core/core.hpp> #include <opencv2/imgcodecs.hpp> // imread在这个头文件里(OpenCV4.x版本)
同时把代码修改为:
cv::Mat img = cv::imread("test.png");
如果嫌每次写cv::麻烦,可以在cpp文件开头加using namespace cv;(注意不要在头文件里加,避免命名空间污染)。
2. 编译器与OpenCV库不兼容
你的.pro里配置的OpenCV库是vc15版本(对应VS2017编译器),但如果你的Qt Creator当前使用的是MinGW套件,那这两个完全不兼容,会直接导致链接错误(也就是编译阶段失败)。
验证方法:
打开Qt Creator的工具->选项->构建和运行,查看当前选中的套件(Kit)的编译器是MSVC2017还是MinGW。
修复方法:
- 如果是MinGW:要么切换到MSVC2017的Kit,要么重新用MinGW编译一份对应版本的OpenCV库,再替换.pro里的路径。
- 如果是MSVC2017:那这部分配置没问题,继续排查其他点。
3. .pro文件配置冗余导致的问题
你的.pro里最后一行else:unix: LIBS += ...在Windows环境下是多余的,而且可能干扰配置逻辑,建议删掉这行,把OpenCV的配置整理得更清晰:
# 把OpenCV的INCLUDEPATH移到boost前面(避免潜在的头文件冲突,非必须但更稳妥) INCLUDEPATH += D:/opencv/build/include \ D:/boost DEPENDPATH += D:/opencv/build/include # 单独封装win32的OpenCV库配置 win32 { CONFIG(release, debug|release): LIBS += -LD:/opencv/build/x64/vc15/lib/ -lopencv_world420 CONFIG(debug, debug|release): LIBS += -LD:/opencv/build/x64/vc15/lib/ -lopencv_world420d }
4. 清理项目缓存重新构建
有时候Qt Creator的旧缓存会导致奇怪的编译错误,执行以下操作:
- 点击菜单栏
构建->清理项目 - 然后点击
构建->重新构建项目
总结
最可能导致你编译失败的两个原因是:imread未加cv::前缀/头文件缺失,或者编译器与OpenCV库不兼容。先按上面的步骤排查,应该能解决问题。
内容的提问来源于stack exchange,提问作者badcoder11
相关产品推荐
相关产品推荐

