我使用opencv从文件中写入/读取一些数据。下面是我的代码结构和配置文件。
/src/test.cpp
/src/config/FrameDifferenceBGS.xml
代码
CvFileStorage * fs = cvOpenFileStorage(".config/FrameDifferenceBGS.xml",0,CV_STORAGE_WRITE);
cvWriteInt(fs,"enableThreshold",21);
cvReleaseFileStorage(&fs);
这行不通。
也出现了同样的错误' OpenCV错误:空指针(指向文件存储的无效指针)在cvWriteInt,文件/home/winawer/downloads/OpenCV -2.4.9/modules/core/src/persistence.cpp,行2964在抛出'cv::Exception'实例后调用终止
但是,如果我将文件更改为与源代码相同的级别,
/src/test.cpp
/src/FrameDifferenceBGS.xml
和CvFileStorage * fs = cvOpenFileStorage("FrameDifferenceBGS.xml",0,CV_STORAGE_WRITE);
这工作。
所以我的问题是如何将数据写入与源代码在不同级别的文件中?
解决方案:现在我找到了解决方案,我应该把配置文件夹放在项目调试文件夹中,而不是项目源文件夹
您缺少一个/
:
CvFileStorage * fs = cvOpenFileStorage(".config/FrameDifferenceBGS.xml",0,CV_STORAGE_WRITE);
应该CvFileStorage * fs = cvOpenFileStorage("./config/FrameDifferenceBGS.xml",0,CV_STORAGE_WRITE);
您得到空指针错误,因为cvOpenFileStorage()
失败,因为没有名为.config
的目录
如果你想使用相对路径,正确的格式是:
"./config/FrameDifferenceBGS.xml"
或
/config/FrameDifferenceBGS.xml
现在,您应该知道这个相对路径的根路径。我知道相对路径是相对于输出目录的。如果你在调试模式下工作,你的项目输出目录是 debug 文件夹,否则是Release文件夹