[vs+opencv]#include <opencv2/img_hash.hpp>#include <opencv2/nonfree.hpp>明明安装了opencv,却找不到这两个头文件的解决方法

项目场景:

vs结合opencv进行图像处理时,明明安装了opencv的库,一直可以正常使用

#include 

这应该是正常opencv的使用,都没有问题。现在发现,原来opencv一个库并没有集成完所有的模块,还有一个opencv_contrib 模块。


问题描述

在做一个图像对比的项目时,使用到了哈希算法,在刚刚接触时只知道是opencv里的模块,但是引入头文件后发现它提示找不到下面这个头文件:

#include 

这个明明是opencv库里的,经过重新的更改项目配置,发现还是找不到这个头文件,opencv.hpp是可以正常识别的。


原因分析:

在平时遇到这种问题,肯定是认为自己的包含目录、库目录和依赖项没有配置好,甚至怀疑自己的环境变量出了问题,但是这次竟然没想到是opencv库里面根本没有这个模块!!!

通过网上查阅,我进入opencv文件夹寻找这个模块的文件夹地址,发现根本没有这个文件夹
[vs+opencv]#include <opencv2/img_hash.hpp>#include <opencv2/nonfree.hpp>明明安装了opencv,却找不到这两个头文件的解决方法_第1张图片
正常的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
[vs+opencv]#include <opencv2/img_hash.hpp>#include <opencv2/nonfree.hpp>明明安装了opencv,却找不到这两个头文件的解决方法_第2张图片
[vs+opencv]#include <opencv2/img_hash.hpp>#include <opencv2/nonfree.hpp>明明安装了opencv,却找不到这两个头文件的解决方法_第3张图片
下载完成后,这里包含了许多模块

#include 

这个常用模块在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包
在这里插入图片描述

你可能感兴趣的:(Bug,opencv,计算机视觉,人工智能,c++)