OpenCV中fs.open调用失败求助:读取.xml文件抛出cv::Exception异常
解决OpenCV读取XML时的"Input file is empty"异常
嘿,别着急,我来帮你捋捋这个问题~你遇到的cv::Exception提示“Input file is empty”,核心问题就是OpenCV要么找不到有效的test.xml文件,要么文件本身不符合读取要求。结合你的Win7+VS2015+OpenCV3.4.1的环境,我整理了几个最可能的原因和解决办法:
1. 相对路径没找对文件
你代码里用的是相对路径"test.xml",程序运行时会在当前工作目录查找文件,而不是你的.cpp源码所在的目录!VS2015默认的工作目录是项目根目录(不是Debug/Release输出文件夹)。
- 快速验证:把文件路径改成绝对路径试试,比如
"C:\\Users\\你的用户名\\Desktop\\test.xml"(Windows路径要注意用双反斜杠\\或者正斜杠/),如果能正常运行,那就是相对路径的问题。 - 永久解决:右键项目→属性→调试→工作目录,把路径改成你存放
test.xml的文件夹,之后用相对路径就没问题了。
2. XML文件为空或格式错误
OpenCV对XML文件的格式有明确要求,空文件或者不符合规范的文件都会触发这个错误:
- 先打开你的
test.xml确认:是不是创建了文件但没写入任何内容?或者保存时出错了? - 你可以先写一个最简单的符合OpenCV要求的XML测试文件,比如:
用这个文件测试读取,看是否还会报错。<?xml version="1.0"?> <opencv_storage> <test_value>123</test_value> </opencv_storage>
3. 文件权限限制
Win7下某些目录(比如C盘根目录、Program Files文件夹)的权限比较严格,程序可能没有读取文件的权限:
- 把
test.xml移到桌面、文档这类普通用户有完全权限的目录,再运行程序试试。
4. 额外检查:OpenCV配置是否正确
虽然如果配置错误大概率编译不过,但也可以快速确认一下:
- 右键项目→属性→链接器→输入→附加依赖项,检查是否包含了对应模式的core库:Debug模式是
opencv_core341d.lib,Release模式是opencv_core341.lib。
小提示
以后遇到文件读取类的问题,优先检查三个点:文件是否存在、路径是否正确、文件内容是否有效,这几乎能解决80%的类似问题~
内容的提问来源于stack exchange,提问作者Fox
相关产品推荐
相关产品推荐

