项目场景:
vs结合opencv进行图像处理时,明明安装了opencv的库,一直可以正常使用
#include <opencv2/opencv.hpp>
这应该是正常opencv的使用,都没有问题。现在发现,原来opencv一个库并没有集成完所有的模块,还有一个opencv_contrib 模块。
问题描述
在做一个图像对比的项目时,使用到了哈希算法,在刚刚接触时只知道是opencv里的模块,但是引入头文件后发现它提示找不到下面这个头文件:
#include <opencv2/img_hash.hpp>
这个明明是opencv库里的,经过重新的更改项目配置,发现还是找不到这个头文件,opencv.hpp是可以正常识别的。
原因分析:
在平时遇到这种问题,肯定是认为自己的包含目录、库目录和依赖项没有配置好,甚至怀疑自己的环境变量出了问题,但是这次竟然没想到是opencv库里面根本没有这个模块!!!
通过网上查阅,我进入opencv文件夹寻找这个模块的文件夹地址,发现根本没有这个文件夹
正常的opencv只有这么多模块,如果大家在利用模块头文件时,可以到这个文件夹中查阅一下有没有所用的那个头文件。
解决方案:
通过查找,发现opencv还有一个contrib库
opencv_contrib 是 OpenCV 的一个贡献模块,它包含了许多 OpenCV 官方库中没有的模块。这些模块主要是来自 OpenCV 社区的贡献,涵盖了各种计算机视觉领域,如3D物体识别、3D重建、人脸识别等等。
OpenCV在视觉算法中的功能非常强大,其中一个原因就是该算法库一直在与时俱进的更新最新的算法,对于具有专利的算法(如SURF)以及一些还没有稳定的算法,OpenCV会将其置于扩展模块中,这些扩展模块包含在opencv_contrib代码库中。对于稳定的算法,会被移到OpenCV主仓库代码中,因此读者需要谨慎的使用opencv_contrib,因为不同版本的函数可能存在差异。
在OpenCV 3.x版本之后,opencv_contrib就不再包含于OpenCV源码中,需要另外下载。
opencv-contrib模块介绍
大家可以点击这个链接去查看:OpenCV4与opencv-contrib模块介绍
主要是一些快速、复杂的图像处理,例如CUDA、三维、人脸分析等
然后就开始重新下载opencv_contrib的库进行添加。注意版本的区别,这个就不需要多说了,版本的问题应该在小白阶段让大家懊悔不已过。
我这里使用的是vs2019+4.40_contrib
下载完成后,这里包含了许多模块
#include <opencv2/nonfree.hpp>
这个常用模块在xfeatures2d文件中,见上图。
将其配置在vs中,模块顺利识别,程序正常运行。
注:vs依赖项记录(release版本)
opencv_aruco440.lib
opencv_bgsegm440.lib
opencv_bioinspired440.lib
opencv_calib3d440.lib
opencv_ccalib440.lib
opencv_core440.lib
opencv_datasets440.lib
opencv_dnn_objdetect440.lib
opencv_dnn_superres440.lib
opencv_dnn440.lib
opencv_dpm440.lib
opencv_face440.lib
opencv_features2d440.lib
opencv_flann440.lib
opencv_fuzzy440.lib
opencv_gapi440.lib
opencv_hfs440.lib
opencv_highgui440.lib
opencv_img_hash440.lib
opencv_imgcodecs440.lib
opencv_imgproc440.lib
opencv_intensity_transform440.lib
opencv_line_descriptor440.lib
opencv_ml440.lib
opencv_objdetect440.lib
opencv_optflow440.lib
opencv_phase_unwrapping440.lib
opencv_photo440.lib
opencv_plot440.lib
opencv_quality440.lib
opencv_rapid440.lib
opencv_reg440.lib
opencv_rgbd440.lib
opencv_saliency440.lib
opencv_shape440.lib
opencv_stereo440.lib
opencv_stitching440.lib
opencv_structured_light440.lib
opencv_superres440.lib
opencv_surface_matching440.lib
opencv_text440.lib
opencv_tracking440.lib
opencv_video440.lib
opencv_videoio440.lib
opencv_videostab440.lib
opencv_xfeatures2d440.lib
opencv_ximgproc440.lib
opencv_xobjdetect440.lib
opencv_xphoto440.lib
本文记录调试过程的bug和问题,记录备注下供学习使用,个人情况不同,经供参考,欢迎交流。
留言可提供contrib包