You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

路径正确但OpenCV cv::imread无法读取图片,报错文件无法打开

问题:cv::imread()始终无法读取图片(路径正确但报错文件无法打开)

我正在学习C++版OpenCV,目前遇到一个棘手问题:明明图片路径正确,但cv::imread()始终无法打开任何图片。调用时会出现警告:

[ WARN:0@1.387] global loadsave.cpp:241 cv::findDecoder imread_(''): can't open/read file: check file path/integrity

我已经尝试了以下操作,但都没有解决:

  • 更换路径分隔符:/、//、\\、\都试过
  • 使用绝对路径和相对路径
  • 读取不同磁盘(C:/、D:/)、不同文件夹下的不同格式图片
  • 更新OpenCV到4.10版本

当前环境:OpenCV 4.10 + Visual Studio 2022,运行的代码如下:

#pragma once
#include <opencv2/opencv.hpp>
#include <iostream>
#include <filesystem>
#include <windows.h>
#include <shobjidl.h>

int main() {

    cv::String filepath("D:/repos/faculdade/dataset/AnaCedran60dias.jpg");

    cv::Mat cvimg = cv::imread(filepath, 0);

    std::cout << "Path:\n" << filepath << std::endl;

    if(cvimg.empty())
        std::cout << "img wasnt read" << std::endl;
    
    cv::waitKey(0);
}

可能的解决方法

  • 检查项目工作目录
    Visual Studio默认工作目录是项目的Debug/Release文件夹,而非源代码所在目录。用绝对路径时,建议先打印当前工作目录确认程序实际运行路径:

    std::cout << "Current working dir: " << std::filesystem::current_path() << std::endl;
    

    确保文件路径与程序运行路径匹配。

  • 验证文件权限与完整性

    • 避免将图片放在系统保护文件夹(如C:\Windows、Program Files),确保程序有读取权限
    • 手动打开图片确认文件未损坏,或转换为PNG等通用格式后再尝试读取
  • 解决字符串编码问题
    Windows下路径可能涉及Unicode编码,尝试使用宽字符版本的cv::imreadw():

    std::wstring wfilepath(L"D:/repos/faculdade/dataset/AnaCedran60dias.jpg");
    cv::Mat cvimg = cv::imreadw(wfilepath, 0);
    
  • 调试路径传递正确性
    除了打印路径,还可以检查cv::String的实际内容,排查是否有隐藏字符:

    std::cout << "Path length: " << filepath.size() << std::endl;
    for (char c : filepath) {
        std::cout << c << " ";
    }
    std::cout << std::endl;
    
  • 检查OpenCV链接配置
    确认Visual Studio中已正确配置OpenCV的包含目录、库目录,并且链接了对应模式的库文件:Debug模式用opencv_world410d.lib,Release模式用opencv_world410.lib。手动编译的OpenCV需确保包含imgcodecs编解码器模块。

内容的提问来源于stack exchange,提问作者abnt2008

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 23:44:55