当前位置: 首页 > news >正文

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文件,就没报错了。

http://www.jsqmd.com/news/306482/

相关文章:

  • 电脑没有键盘或完全失灵,怎么输入控制电脑?-「应急方案」
  • HeyGem视频格式兼容性测试,这些格式最稳定
  • 实测Flash Attention加速效果:YOLOv12性能揭秘
  • Oracle AQ性能救星:手动合并索引,让队列速度飙升90%!​
  • HY-Motion 1.0效果展示:A person climbs upward 动态重心迁移可视化
  • 亲测IndexTTS 2.0:上传5秒音频,立马克隆专属声线,效果惊艳
  • CogVideoX-2b电商应用:商品文案一键生成主图视频
  • SiameseUIE多粒度抽取教程:细粒度产品属性(颜色/尺寸/材质)识别实践
  • 告别虚高相似度:StructBERT精准中文语义匹配系统部署指南
  • 亲测Z-Image-Turbo_UI界面:1024高清出图,低显存流畅运行
  • 1.5B超轻量模型如何兼顾性能与精度?DeepSeek-R1-Distill-Qwen-1.5B蒸馏原理与部署实录
  • 企业数字化转型
  • HY-Motion-1.0-Lite轻量模型实测:24GB显存流畅运行效果
  • Hunyuan-MT-7B跨平台部署:Windows WSL2 + Ubuntu 22.04 完整安装指南
  • GLM-TTS保姆级部署指南,3步搞定AI语音生成
  • HG-ha/MTools音视频编辑实战:AI降噪与自动剪辑方案
  • GLM-4-9B-Chat-1M多场景落地:教育行业百万字教辅资料智能出题系统建设实录
  • 新手友好!测试开机启动脚本镜像使用全攻略
  • 软件信创符合性测试流程与材料清单
  • StructBERT中文语义匹配:零门槛搭建本地Web交互系统
  • 游戏NPC配音新玩法:GLM-TTS定制角色声音
  • 企业知识管理实战:用Qwen3-Embedding-4B打造智能检索系统
  • RexUniNLU中文NLP系统详解:DeBERTa中文位置编码与长文本截断策略
  • HY-MT1.5-1.8B为何稳定?学生模型纠正机制部署解析
  • Qwen3-VL-4B Pro教育应用实战:试卷图表识别+解题思路生成教程
  • YOLO11 C2PSA注意力机制,特征提取更强了
  • translategemma-4b-it生产环境:中小企业低成本图文翻译部署方案
  • 工业PLC替代方案中STM32CubeMX下载指南
  • 全任务零样本学习-mT5中文-base参数调优指南:温度1.0时生成多样性与可控性平衡点
  • Qwen3-4B在金融场景应用:财报摘要生成与关键指标问答