本来不打算写这样一篇文章的,毕竟有很多配置的帖子。可是有的博主过程看着详细但是却丢失了一些关键点,而且安装软件的版本也不同。这导致我在出了错误后,重复配置了无数次还是报错,然后三天阅读了不下一百个帖子才把问题解决掉,所以准备写一篇。既是提醒以后的自己,也可以帮助他人
笔者先说可能出的错误的改变方法,再讲配置过程,第一次配置的筒子们直接【点击目录】进入配置过程中即可
cmake3.14新版这里第二行要选择x64,不然会默认装win32
阅读cmake底下报错的红字,找到CMakeDownloadLog.txt
打开后观察这些文字(笔者打开自己的这份文件)
这里的意思是从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编译生成这三个文件时发生了错误**(只是可能)**,希望筒子们找到错误后能够告诉笔者一下
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
如果是的话就是错误⑤,请看错误⑤
!这个笔者非常生气,只要运行到surf或sift就崩溃,重新配置了不下五次,找了三天的错误,发现是观看的指导帖子里漏写了一个关键的地方
(所以如果不确定自己写的东西就不要写!真的很气,误导别人。找错误一找就是三天)
在cmake配置过程中,在为“OPENCV_EXTRA_MODULES_PATH”添加扩展模块源码的路径“…/modules”
在项目中如果要用到SURF,cmake编译时一定要勾选“OPENCV_ENABLE_NONFREE”选项
因为我们配置opencv_contrib,那很可能是要用到surf,sift这些函数的,所以这里如果不勾上就会一直报错,而且你还找不到错误在哪!
这是与上面一个错误不同的错误,错误原因是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等函数