记录一个opencv的imread方法无法读取成功的问题,【设计到visual studio和静态库(lib)匹配的问题】
一、为什么会遇到这个问题
公司需要对多图进行拼接,经过多番查找发现了OpenStitching这个库。可以实现多图拼接。在python段尝试了之后感觉效果不错,所以使用Visual Studio进行C++开发。
在读取图片的时候发现imread方法无论怎么样都无法读取到图片。
二、解决办法
我一开始以为是路径的问题,在尝试过相对路径、绝对路径无果后,就开始排查其他的问题。最后的解决办法:
如果工程配置的是debug,那么在添加 “配置属性 -> 链接器 -> 输入 -> 附加依赖项” 的时候,需要添加的静态库是带有d结尾的lib文件。
这样就解决了问题。
三、为什么会有这个问题
小弟不才😀,还是问了AI。以下是AI给出的解释,大家当个参考吧。
调试版本库和发布版本库之间的主要区别在于编译器的设置和优化。以下是一些关键区别:
调试信息:
调试版本库(Debug Build):包含了额外的调试信息,比如符号表和源代码映射,这使得你在调试时能够更容易地跟踪代码和诊断问题。调试版本库没有经过优化,代码的执行速度可能较慢,但调试信息能帮助你更好地理解代码的执行情况。
发布版本库(Release Build):不包含调试信息,经过优化以提高代码的执行效率和性能。优化可能会改变代码的执行方式,使得调试信息不再有效,因此在发布版本时,调试信息通常是不需要的。
优化:
调试版本库:编译器通常会关闭优化,以便你可以逐步执行代码并检查变量的值。这使得调试过程更可控,但可能导致生成的代码效率较低。
发布版本库:编译器会开启各种优化选项,试图提高程序的执行速度和减少代码体积。这些优化可能会对代码行为产生影响,比如内联函数、循环展开等。
运行时检查:
调试版本库:通常会启用额外的运行时检查,比如边界检查、断言等。这些检查帮助捕捉潜在的错误,但也会带来额外的运行时开销。
发布版本库:通常会关闭这些运行时检查,以提高性能。
库文件的命名:
调试版本库:通常会带有 d 后缀(例如 opencv_world4100d.lib 和 opencv_world4100d.dll)。
发布版本库:没有 d 后缀(例如 opencv_world4100.lib 和 opencv_world4100.dll)。
在项目中混用调试和发布版本库可能会导致不兼容的问题,特别是在使用第三方库(如 OpenCV)时。如果你在调试模式下使用了发布版本库,或者在发布模式下使用了调试版本库,可能会遇到一些无法预测的行为或错误。因此,确保你的编译设置与链接库版本相匹配是非常重要的。