news 2026/6/14 21:05:04

Qt中使用opencv库imread函数读出的图片是空

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt中使用opencv库imread函数读出的图片是空

笔者在基于opencv库的qt开发中,使用cv::imread读取图片时总是读到空图片,但是用QImage读同样的图片就没问题,说明图片并未损坏,路径是对的。那问题在哪里呢?

首先,在程序运行目录下放一张简单的jpg格式图片,如果jpg格式都不能读,说明本身库的调用就有问题。

测试代码如下:

// 测试读取一个简单的 JPG 文件 cv::Mat testImg = cv::imread("test.jpg"); // 放在构建目录下,用相对路径 if (testImg.empty()) { std::cout << "连普通的 JPG 都读不了!说明 imread 功能彻底坏了。" << std::endl; } else { std::cout << "JPG 读取成功!说明 imread 功能正常,只是那个 BMP 文件有问题。" << std::endl; }

结果,确实是连jpg都读不了。

我们临时生成一个图片,看看能不能读

#include <QCoreApplication> #include <opencv2/opencv.hpp> #include <iostream> #include <fstream> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 测试1: 检查OpenCV是否能读取任何图片 std::cout << "=== 测试1: OpenCV文件读取能力 ===" << std::endl; // 创建并保存一个测试图片 cv::Mat test_img = cv::Mat::ones(100, 100, CV_8UC3) * cv::Scalar(100, 150, 200); cv::imwrite("test_saved.png", test_img); std::cout << "1. 已创建 test_saved.png" << std::endl; // 立即读取刚才保存的文件 cv::Mat loaded = cv::imread("test_saved.png"); if (loaded.empty()) { std::cout << "❌ OpenCV无法读取自己刚保存的文件!" << std::endl; std::cout << " 这表明OpenCV的imgcodecs模块有问题" << std::endl; } else { std::cout << "✅ OpenCV能读取自己保存的文件" << std::endl; std::cout << " 尺寸: " << loaded.size() << std::endl; } return a.exec(); }

结果连测试图片都没有创建,只打印了程序开头第一句 程序就崩溃了,崩溃提示如下:

这是典型的DLL依赖问题OpenCV库冲突。经过排查pro文件,发现我导入opencv库的语句如下:

unix|win32: LIBS += -L$$PWD/../../../../../opencv/build/x64/vc14/lib/ -lopencv_world440 INCLUDEPATH += $$PWD/../../../../../opencv/build/x64/vc14 DEPENDPATH += $$PWD/../../../../../opencv/build/x64/vc14 unix|win32: LIBS += -L$$PWD/../../../../../opencv/build/x64/vc14/lib/ -lopencv_world440d INCLUDEPATH += $$PWD/../../../../../opencv/build/x64/vc14 DEPENDPATH += $$PWD/../../../../../opencv/build/x64/vc14

AI问题分析:

  1. VC14 vs VC15冲突

    • 你的错误信息显示OpenCV是vc15编译的

    • 但你的.pro文件链接的是vc14

    • 这是ABI不兼容,必然崩溃

  2. Release/Debug库同时链接

    • 你同时链接了opencv_world440(Release) 和opencv_world440d(Debug)

    • 这会导致符号冲突

总结:Release/Debug库混用版本不匹配问题。

修复方案:区分debug和release配置:

# 删除原来的配置,改为: # OpenCV包含路径 INCLUDEPATH += $$PWD/../../../../../opencv/build/include # Debug配置 - 链接Debug库 CONFIG(debug, debug|release) { message("Debug配置:使用Debug版OpenCV") LIBS += -L$$PWD/../../../../../opencv/build/x64/vc15/lib/ LIBS += -lopencv_world440d # 注意最后的d表示Debug } # Release配置 - 链接Release库 CONFIG(release, debug|release) { message("Release配置:使用Release版OpenCV") LIBS += -L$$PWD/../../../../../opencv/build/x64/vc15/lib/ LIBS += -lopencv_world440 # 没有d,表示Release }

现在再读取最开始的jpg文件,就没报错了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 16:02:13

HY-Motion-1.0-Lite轻量模型实测:24GB显存流畅运行效果

HY-Motion-1.0-Lite轻量模型实测&#xff1a;24GB显存流畅运行效果 1. 这不是“缩水版”&#xff0c;而是专为落地而生的轻量动作引擎 你有没有试过在本地跑一个文生3D动作模型&#xff0c;结果显存爆了、显卡烫得能煎蛋、生成一段5秒动画要等三分钟&#xff1f;别急——这次…

作者头像 李华
网站建设 2026/6/15 13:32:47

ModbusPoll下载数据监控方法:超详细版说明

以下是对您提供的博文内容进行 深度润色与工程化重构后的版本 。我以一位深耕工业通信十余年、常年泡在现场调试一线的嵌入式系统工程师视角&#xff0c;彻底重写了全文—— 去掉了所有AI腔调、模板化结构和空泛术语堆砌&#xff0c;代之以真实项目中的痛点、踩过的坑、调通…

作者头像 李华
网站建设 2026/6/10 17:02:51

HY-MT1.5-1.8B为何稳定?学生模型纠正机制部署解析

HY-MT1.5-1.8B为何稳定&#xff1f;学生模型纠正机制部署解析 1. 稳定不是偶然&#xff1a;轻量模型背后的“实时纠错”逻辑 很多人看到“1.8B参数、手机端运行、0.18秒延迟”这几个词&#xff0c;第一反应是&#xff1a;这效果能稳住吗&#xff1f;翻译这种强依赖上下文和语…

作者头像 李华
网站建设 2026/6/9 20:01:41

新手友好!测试开机启动脚本镜像使用全攻略

新手友好&#xff01;测试开机启动脚本镜像使用全攻略 你是不是也遇到过这样的问题&#xff1a;写好了服务脚本&#xff0c;却总在重启后发现它没自动运行&#xff1f;改了配置又不敢重启&#xff0c;生怕系统起不来&#xff1f;或者反复调试 rc.local 却始终卡在权限或路径上&…

作者头像 李华
网站建设 2026/5/21 15:11:59

想做地址标准化?先试试这个MGeo镜像

想做地址标准化&#xff1f;先试试这个MGeo镜像 你是不是也遇到过这些场景&#xff1a; 客户订单里写着“朝阳区三里屯太古里北区苹果店”&#xff0c;而系统数据库存的是“北京市朝阳区三里屯路19号院太古里北区Apple Store”&#xff1b; 快递面单上是“深圳南山区科技园科发…

作者头像 李华
网站建设 2026/6/14 1:54:47

珠海惠威科技有限公司 APP开发主管职位深度解析与人才甄选指南

珠海惠威科技有限公司 APP开发主管 职位信息 岗位职责 1、领导移动端(IOS/Android)技术团队,完成产品研发工作; 2、负责APP技术系统的架构设计、系统分析、产品开发和平台搭建; 3、参与并指导核心代码编写,组织解决开发过程中的重大技术问题; 4、跟踪产品开发进度,完成…

作者头像 李华