起初,我在 WinXp 上使用 OpenCV 2.4.2 和 Visual 2008。这是问题所在:
我正在使用该imwrite
函数编写具有以下原型的灰度图像:
bool imwrite( const string& filename, InputArray img, const vector<int>& params=vector<int>());
图像类型预先检查和设置(8 位,1 通道)。但是,在我的情况下,我仅在发布模式下遇到异常(错误 -2,找不到指定扩展名的编写器)来编写 bmp 图像.\Images\Debug\calibration_ref.bmp
。我不明白这个文件名有什么问题。
在深入查看 dll 源文件(opencv_highgui242d.dll、loadsave.cpp、l.298)后,我意识到参数const std::string & filename
(至少是这个……)由于<Bad Ptr>
. 为了得到这个结果,我在发布模式下使用了 highgui 调试版本的 dll,否则,使用 highgui 发布版本,我得到了垃圾字符串。我怀疑所有的论点都被破坏了。
我完全不知道这种腐败是从哪里来的!我到处搜索,但我能找到的所有内容都与在发布模式下禁用优化然后修复错误以及有关线程安全的字符串类的这篇文章有关,但我不确定这是问题所在。
我要补充一点,我使用的 OpenCV 版本不是一个包。我特别用 TBB (ver 4.0 6005) 构建了它。随时提出更多问题。