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这个库出现了问题,其实并不是。

  1. 我的电脑里面有一个opencv2.4以及一个opencv4.5。opencv2.4和4.5都能使用,然后使用opencv2.4的代码是在debug模式下报错。
  2. 问题在于opencv是在debug和release模式下是需要不同的库,分别是xxxd.dll和xxx.dll。而在我的电脑对应的opencv库里面,通过.cmake文件可以看出opencv2.4只有release版本,并且没有xxxd.dll这种形式的库。

图片说明

图1 opencv4/x64/vc14/lib下的.cmake文件

image-20210701180625951

图2 opencv2413/x64/vc14/lib下的.cmake文件
  1. 两种库可以公用吗?不可以,因为opencv的源代码是包含stl库函数的,而stl库在debug和release版本下则有不同的表现。比如std::string 在debug 和 release 环境中的内存大小是不一致的。 如果混用,会出现内存奔溃现象。

  2. 两种库的使用方式是同样的。可以通过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})
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务