OpenCV C++无法读取图片求助:路径正确仍出现读取及断言报错
OpenCV imread无法读取图片且触发namedWindow断言错误排查
问题描述
使用OpenCV的imread函数读取图片时失败,已确认文件路径正确、图片实际存在,尝试过参照YouTube教程排查、调试路径均无效果,目前无法推进。
报错信息
[ WARN:0@0.382] global loadsave.cpp:248 cv::findDecoder imread_(''):
can't open/read file: check file path/integrity
OpenCV Exception:
OpenCV(4.9.0)
C:\GHA-OCV-1_work\ci-gha-workflow\ci-gha-workflow\opencv\modules\highgui\src\window.cpp:449:
error: (-215:Assertion failed) !winname.empty() in function
'cv::namedWindow'
运行环境
- 控制台应用
- C++ 17 X64 Unicode
- 编译器:VS 2022
相关代码
#include <iostream> #include <opencv2/opencv.hpp> #include <Windows.h> int main() { try { cv::Mat img = cv::imread("C:\\Users\\S06\\Downloads\\panneau.jpg", cv::IMREAD_COLOR); cv::namedWindow("Image", cv::WINDOW_AUTOSIZE); cv::imshow("Image", img); cv::waitKey(0); } catch (const cv::Exception& e) { std::cerr << "OpenCV Exception: " << e.what() << std::endl; system("pause"); return -1; } catch (const std::exception& e) { std::cerr << "Standard Exception: " << e.what() << std::endl; system("pause"); return -1; } catch (...) { std::cerr << "Unknown Exception" << std::endl; system("pause"); return -1; } system("pause"); return 0; }
排查与解决建议
修复路径的Unicode适配问题:VS默认的Unicode项目中,
imread的char*路径参数可能无法正确解析,改用宽字符版本的imread:cv::Mat img = cv::imread(L"C:\\Users\\S06\\Downloads\\panneau.jpg", cv::IMREAD_COLOR);或者将路径转换为UTF-8编码的std::string传入。
提前校验图片读取结果:在执行窗口相关操作前,先判断
cv::Mat是否为空,避免触发断言错误:cv::Mat img = cv::imread("C:\\Users\\S06\\Downloads\\panneau.jpg", cv::IMREAD_COLOR); if (img.empty()) { std::cerr << "图片读取失败,请检查路径或文件完整性" << std::endl; system("pause"); return -1; }检查文件权限:尝试以管理员身份运行VS,确保程序拥有读取目标文件夹(Downloads)的权限。
验证图片完整性:重新打开或下载目标图片,确认文件未损坏;也可更换其他格式的图片测试,排除图片本身的问题。
内容的提问来源于stack exchange,提问作者SplatStereer
相关产品推荐
相关产品推荐

