cmake3.14.0+opencv_contrib4.0.1+VS2017配置过程及可能出现的错误和问题

cmake3.14.0+opencv_contrib4.0.1+VS2017配置过程及可能出现的错误和问题

  • 目录
    • 笔者安装中出过的错误
      • ①cmake编译后为什么vs2017的Debug只有win32没有x64?
      • ①cmake下载opencv_ffmpeg.dll等文件失败怎么办
      • ②未定义标识符?
      • ③编译出错,找不到文件
      • ④debug error?
      • ⑤debug Error: The function/feature is not implemented?
      • ⑤debug Error: The function/feature is not implemented () in detectAndCompute?
    • 安装配置过程
      • 稍等
    • 后序
    • 参考博客

目录

本来不打算写这样一篇文章的,毕竟有很多配置的帖子。可是有的博主过程看着详细但是却丢失了一些关键点,而且安装软件的版本也不同。这导致我在出了错误后,重复配置了无数次还是报错,然后三天阅读了不下一百个帖子才把问题解决掉,所以准备写一篇。既是提醒以后的自己,也可以帮助他人

笔者先说可能出的错误的改变方法,再讲配置过程,第一次配置的筒子们直接【点击目录】进入配置过程中即可

笔者安装中出过的错误

①cmake编译后为什么vs2017的Debug只有win32没有x64?

cmake3.14新版这里第二行要选择x64,不然会默认装win32
cmake3.14.0+opencv_contrib4.0.1+VS2017配置过程及可能出现的错误和问题_第1张图片

①cmake下载opencv_ffmpeg.dll等文件失败怎么办

阅读cmake底下报错的红字,找到CMakeDownloadLog.txt
cmake3.14.0+opencv_contrib4.0.1+VS2017配置过程及可能出现的错误和问题_第2张图片
打开后观察这些文字(笔者打开自己的这份文件)

这里的意思是从https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a9310
3dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll中下载文件opencv_ffmpeg.dll
并且md5值是849286ccc527c99e5a218b67f13c6e8c(配置不同一般每个机子md5值都不同)

保存到D:/Program Files (x86)/opencv/opencv-build-x64/3rdparty/ffmpeg中

{
#use_cache “D:/Program Files (x86)/opencv/opencv-4.0.1/.cache”
#do_copy “opencv_ffmpeg.dll” “849286ccc527c99e5a218b67f13c6e8c”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a9310
3dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll” “D:/Program Files (x86)/opencv/opencv-
build-x64/3rdparty/ffmpeg”
}

这里的意思是在笔者这个目录下不是正确下载的文件
#missing “D:/Program Files (x86)/opencv/opencv-build-
x64/3rdparty/ffmpeg/opencv_ffmpeg.dll”

不用管(机子检查md5)
#check_md5 “D:/Program Files (x86)/opencv/opencv-
4.0.1/.cache/ffmpeg/849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll”

不用管(机子发现md5不匹配)
#mismatch_md5 “D:/Program Files (x86)/opencv/opencv-
4.0.1/.cache/ffmpeg/849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll” “f15b962f742a5f0c34d76a86c51c1f1a”

把这个cache目录下(注意与刚才的目录不一样了)的文件删掉
#delete “D:/Program Files (x86)/opencv/opencv-
4.0.1/.cache/ffmpeg/849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll”

把下载的文件用md5+文件名重命名,然后保存到这里目录下。比如opencv_ffmpeg.dll重命名后就是849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll(注意每个版本,机子配置不同,md5值不同!)然后继续用cmake 进行configure
#cmake_download “D:/Program Files (x86)/opencv/opencv-
4.0.1/.cache/ffmpeg/849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a9310
3dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll”

同样,从网址里下载文件,还给出了它的md5值
#do_unpack “ippicv_2019_win_intel64_20180723_general.zip” “1d222685246896fe089f88b8858e4b2f” “https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28
f8120a48b368b4/ippicv/ippicv_2019_win_intel64_20180723_general.zip” “D:/Program
Files (x86)/opencv/opencv-build-x64/3rdparty/ippicv”

不用管
#check_md5 “D:/Program Files (x86)/opencv/opencv-
4.0.1/.cache/ippicv/1d222685246896fe089f88b8858e4b2f-
ippicv_2019_win_intel64_20180723_general.zip”

不用管
#mismatch_md5 “D:/Program Files (x86)/opencv/opencv-
4.0.1/.cache/ippicv/1d222685246896fe089f88b8858e4b2f-
ippicv_2019_win_intel64_20180723_general.zip” “ef2831095d746bc2e07f35baefe2d301”

删掉原来目录下的文件
#delete “D:/Program Files (x86)/opencv/opencv-
4.0.1/.cache/ippicv/1d222685246896fe089f88b8858e4b2f-
ippicv_2019_win_intel64_20180723_general.zip”

把md5+文件名重命名后保存到这个文件里
#cmake_download “D:/Program Files (x86)/opencv/opencv-
4.0.1/.cache/ippicv/1d222685246896fe089f88b8858e4b2f-
ippicv_2019_win_intel64_20180723_general.zip”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28
f8120a48b368b4/ippicv/ippicv_2019_win_intel64_20180723_general.zip”

注意:如果下载的是cmake类型的话,它直接会打开一个网页,这时候直接右键保存网页即可

②未定义标识符?

(1).头文件
#include
注意opencv3以后原来nonfree里的那些函数的头文件到了xfeatures2d里

(2).可能是命名空间错误
大部分情况下加一个using namespace cv;即可
如果不行就再加一句using namespace xfeatures2d;

③编译出错,找不到文件

(1).是不是忘了把opencv_img_hash401d.dll和opencv_world401d.dll复制到C:\Windows\SysWOW64这个文件夹里了?

(2).是不是忘了把opencv_ffmpeg401_64.dll复制到C:\Windows\System32里了?

如果都不是,可能是cmake编译生成这三个文件时发生了错误**(只是可能)**,希望筒子们找到错误后能够告诉笔者一下

④debug error?

abort() has been called就是野指针的问题,指向了一个别的内存区间
这个有两个主要的可能
(1).在读取图片的时候是不是写错了路径,把文件的具体路径再试着重新写一下。注意,因为代码里\是转义字符,所以要用\或/来表示。
例子:D:\image\70491.jpg

(2).看一下出现警告的同时,黑屏程序框中是不是也提示Error: The function/feature is not implemented (This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library) in cv::xfeatures2d::SURF::create
如果是的话就是错误⑤,请看错误⑤

⑤debug Error: The function/feature is not implemented?

!这个笔者非常生气,只要运行到surf或sift就崩溃,重新配置了不下五次,找了三天的错误,发现是观看的指导帖子里漏写了一个关键的地方
(所以如果不确定自己写的东西就不要写!真的很气,误导别人。找错误一找就是三天)

在cmake配置过程中,在为“OPENCV_EXTRA_MODULES_PATH”添加扩展模块源码的路径“…/modules”

在项目中如果要用到SURF,cmake编译时一定要勾选“OPENCV_ENABLE_NONFREE”选项

因为我们配置opencv_contrib,那很可能是要用到surf,sift这些函数的,所以这里如果不勾上就会一直报错,而且你还找不到错误在哪!

⑤debug Error: The function/feature is not implemented () in detectAndCompute?

这是与上面一个错误不同的错误,错误原因是opencv3用了opencv2的代码

using namespace cv;
// ====== 2.4 =======
#include "opencv2/features2d/features2d.hpp"
BriefDescriptorExtractor brief(32);
GridAdaptedFeatureDetector detector(new FastFeatureDetector(10, true), DESIRED_FTRS, 4, 4);
// ...
detector.detect(gray, query_kpts); //Find interest points
brief.compute(gray, query_kpts, query_desc); //Compute brief descriptors at each keypoint location
// ====== 3.0 =======
#include "opencv2/features2d.hpp"
#include "opencv2/xfeatures2d.hpp"
using namespace cv::xfeatures2d;
Ptr<BriefDescriptorExtractor> brief = BriefDescriptorExtractor::create(32);
Ptr<FastFeatureDetector> detector = FastFeatureDetector::create(10, true);
// ...
detector->detect(gray, query_kpts); //Find interest points
brief->compute(gray, query_kpts, query_desc); //Compute brief descriptors at each keypoint location

详情参见官方文档:
可参考这篇stackoverflow

安装配置过程

稍等

因为笔者暂时要赶一个报告,所以这里的内容暂时先放下,几天之内补齐。如果大家想配置的话,请参考这个博主的博客(我看了一下,大致没有什么错误)。之后我会写个详细些的
opencv4+contrib 编译
注意,如果安装的话请安装x64的,不然在大项目的过程中很可能会内存不够用

后序

当我们成功配置好了所有的这些,跑一下这位博主的代码测试一下吧
opencv3.4.0中使用SURF算子

参考博客

OpenCV】opencv4.0.1+opencv_contrib4.0.1+VS2015的编译

CMake编译OpenCV4.0时opencv_ffmpeg.dll等下载失败的解决思路总结

CMake opencv时Download: opencv_ffmpeg.dll、ippicv等失败的解决方法

opencv4+contrib 编译

【win+OpenCV3.4.1+opencv_contrib编译】SIFT错误Error: The function/feature is not implemented(表现:报异常)

opencv4+contrib 编译

vs2015下opencv3.3扩展opencv_contrib模块并使用SiftFeatureDetector等函数

你可能感兴趣的:(cmake3.14.0+opencv_contrib4.0.1+VS2017配置过程及可能出现的错误和问题)