在Visual Studio中使用OpenCV Canny边缘检测时无法读取本地图片求助
解决OpenCV无法读取本地图片的问题
嗨,我看你遇到了OpenCV读不出本地图片的问题,这在C++开发里其实是个很常见的小坑,我帮你分析一下原因和解决办法:
问题根源
你的代码里图片路径写的是"C:\Users\deep\Documents\Visual Studio 2017\Backup Files\de2\image.png",但在C++中,反斜杠\是转义字符——比如\U、\D这类组合会被编译器当成特殊序列处理,实际解析出来的路径和你原本想写的完全不一样,这就是OpenCV找不到图片的核心原因。
修复方案
有三种简单的解决办法,任选其一就能搞定:
1. 用双反斜杠代替单反斜杠
把路径里的每个\换成\\,这样编译器就会把它当成普通的路径分隔符:
imgOriginal = cv::imread("C:\\Users\\deep\\Documents\\Visual Studio 2017\\Backup Files\\de2\\image.png",IMREAD_ANYCOLOR | IMREAD_ANYDEPTH);
2. 用正斜杠/作为路径分隔符
Windows系统其实也支持正斜杠作为路径分隔符,这样就完全不用处理转义的问题:
imgOriginal = cv::imread("C:/Users/deep/Documents/Visual Studio 2017/Backup Files/de2/image.png",IMREAD_ANYCOLOR | IMREAD_ANYDEPTH);
3. 使用C++11的原始字符串字面量
如果你的项目支持C++11及以上标准,可以在字符串前加R,并用括号把路径包起来,这样所有字符都会被当成原始字符,不需要任何转义:
imgOriginal = cv::imread(R"(C:\Users\deep\Documents\Visual Studio 2017\Backup Files\de2\image.png)",IMREAD_ANYCOLOR | IMREAD_ANYDEPTH);
额外检查项
要是改完路径还是不行,可以再确认这几点:
- 图片的文件名和后缀是否完全正确(比如是不是
image.png而不是image.PNG?Windows默认隐藏文件后缀,很容易看错) - 图片文件是否真的在你指定的路径下,有没有被移动、删除或者重命名
- 你的Visual Studio项目有没有读取该路径的权限(比如文档文件夹偶尔会需要管理员权限,但这种情况很少见)
内容的提问来源于stack exchange,提问作者Deep tank
相关产品推荐
相关产品推荐

