c++ - OpenCV imread(std::string filename, int flags) 在 c++ 中使用字符串文件名的变量时出现问题
问题描述
我有一个类似这样的功能:
void OpenPattern(std::string filename, bool type){
Mat img = cv::imread(filename, cv::IMREAD_COLOR);
if(img.empty()){
printf("CANNOT OPEN IMAGE");
}else{
doSomethingElse();
}
}
代码编译正常,但是当我运行它时,img 总是空的。我已经测试了存储图像的相对路径和完整路径的文件名。都没有在这里工作。我每次都打印文件名内容,它与图像地址完美匹配。它仅在我这样测试时才有效:
void OpenPattern(std::string filename, bool type){
filename="path to image" //worked with relative and full path
Mat img = cv::imread(filename, cv::IMREAD_COLOR);
//or
//Mat img = cv::imread("path to image", cv::IMREAD_COLOR);
if(img.empty()){
printf("CANNOT OPEN IMAGE");
}else{
doSomethingElse();
}
}
我想很多人都问过类似的问题(比如这里的 imread() won't read string variable in c++),但我还没有找到答案。
有谁知道为什么当文件名是函数参数时 imread() 根本无法打开?或者有谁知道是否有办法调查 imread 决定返回 NULL Mat 的位置,以便我可以更好地调查正在发生的事情?
编辑:
- “图像路径”和文件名 100% 相等。事实上,在我的一项测试中,我使用 imwrite(filename, a) 保存了一张与我想要打开的图像同名的图像,并且它有效。
- 我尝试了文件名的所有变体:使用 /、\、相对路径、绝对路径。3.这个代码应该是另一个代码的重构版本。旧版本确实可以正确打开图像,但我不知道为什么这个不能。
非常感谢!
解决方案
我不知道 OpenCV,但也许这会有所帮助。这些是我在使用其他库和语言时遇到的问题。
确保路径格式正确。你有没有逃脱斜线和其他特殊字符?您是否尝试过正斜杠和反斜杠?您是否有空格,但不受支持?您是否尝试过以斜线开头和不以斜线开头的路径?
推荐阅读
- visual-studio - 打开任何项目时 Visual Studio 2019 16.6.2 100% cpu 使用率
- hadoop - 如果 Hive 的 reducer 数量与键的数量不同,会发生什么?
- sql - 如何连接 SQL Server 中的表,以便将每一行连接一次
- javascript - How do you pass HTML variables to google app scripts
- javascript - 为什么我们需要在这个例子中使用 THIS 关键字?
- reactjs - 如何在卸载 React 模式登录组件之前更新本地存储值
- python - 在python的setter中调用方法
- laravel - 在 Eloquent 中使用 orWhere()
- reactjs - 使用 Thunk 将数据从 Redux 存储加载到 React 状态
- ios - IOS应用程序即使根本不工作也能做事吗(Killed/Non-running state)