OpenCV imread(filename) fails in debug mode when using release libraries

我是研究僧i 提交于 2019-11-27 00:58:26

I'll never get tired of telling people that the C++ OpenCV interface for Windows has the wierdest bugs.

Write a small test using the C interface to check if it works or not (cvLoadImage(), etc).

Update: now that you know that the C interface works properly, you can either go to the mailing list and report this bug there or dig into the code yourself to find why it fails.

In release mode you must use release libraries, in debug mode - debug libraries. It is no bug.

none

Had this problem using Qt (Qt Creator), linking the debug version of the respective library fixed it. This can be done automatically in the project configuration file (.pro):

QTCreator .pro file: Setting LIBS path depending on DEBUG / RELEASE

Use FORWARD slash (/), instead of a backward slash (). Even in Windows!

Incorrect:

cv::imread("C:\example\1.jpg");

Correct:

cv::imread("C:/example/1.jpg");

In general it is perfecly legal to link "Debug" executable configuration against "Release" configuration library (why should not be as far as the symbols exported by the libraries are the same in Debug and in Release?). Unless (for some reasons) you don't want that "mixing" happen. It turns out that opencv developers decided to not allow such mixing and they perform such probihibition with a specific portion of code (something you can find in the file cvdef.h on release 3.4.4 line 54). That is not a C++ interface bug, but a "wanted" behaviour. You can find more information at https://github.com/opencv/opencv/pull/9161 where this change has been documented.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!