cv::imread无法读取图片以及cv::glob报错
cv::imread无法读取图片以及cv::glob报错
问题描述:使用opencv读取图片发生错误,图片路径正确的情况下,imread无法读取图片,glob无法读取文件夹下的文件名。
Exception has occurred: W32/0xC0000409 Unhandled exception at 0x00007FF80834C408 (ucrtbase.dll) in bstitchts.exe: An invalid parameter was passed to a function that considers invalid parameters fatal.
解决思路:代码没有问题,编译也没有问题,报错显示的内容极不相关。刚开始怀疑ucrtbase.dll这个库出现了问题,其实并不是。
- 我的电脑里面有一个opencv2.4以及一个opencv4.5。opencv2.4和4.5都能使用,然后使用opencv2.4的代码是在debug模式下报错。
- 问题在于opencv是在debug和release模式下是需要不同的库,分别是xxxd.dll和xxx.dll。而在我的电脑对应的opencv库里面,通过.cmake文件可以看出opencv2.4只有release版本,并且没有xxxd.dll这种形式的库。
两种库可以公用吗?不可以,因为opencv的源代码是包含stl库函数的,而stl库在debug和release版本下则有不同的表现。比如std::string 在debug 和 release 环境中的内存大小是不一致的。 如果混用,会出现内存奔溃现象。
两种库的使用方式是同样的。可以通过find_package来查找对应版本的库(前提是存在两个版本的库)
set(OpenCV_DIR "D:/opencv/cv24136m") # OpenCV FIND_PACKAGE(OpenCV REQUIRED) if(OpenCV_FOUND) include_directories(${OpenCV_INCLUDE_DIRS}) link_directories(${OpenCV_LIBRARY_DIRS}) endif() target_link_directories(${PROJECT_NAME} ${source_code})