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

目录

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

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

笔者安装中出过的错误

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

cmake3.14新版这里第二行要选择x64,不然会默认装win32
cmake版本问题

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

阅读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 <opencv2/xfeatures2d.hpp>
注意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等函数

要基于 Android 的 OpenCV 4.0.1OpenCV Contrib 4.0.1 进行编译,可以按照以下步骤进行: 1. 下载 OpenCV 4.0.1OpenCV Contrib 4.0.1 的源代码: ``` git clone https://github.com/opencv/opencv.git cd opencv git checkout 4.0.1 cd .. git clone https://github.com/opencv/opencv_contrib.git cd opencv_contrib git checkout 4.0.1 ``` 2. 安装 Android NDK 和 Android SDK,并设置相应的环境变量。 3. 在 opencv 目录下创建一个 build 目录,并进入该目录: ``` mkdir build cd build ``` 4. 运行以下命令,生成 OpenCV Android 库: ``` cmake -DANDROID_ABI=armeabi-v7a \ -DANDROID_PLATFORM=android-21 \ -DANDROID_TOOLCHAIN=clang \ -DANDROID_STL=c++_static \ -DWITH_OPENCL=OFF \ -DWITH_IPP=OFF \ -DWITH_TBB=OFF \ -DWITH_MATLAB=OFF \ -DWITH_CUDA=OFF \ -DWITH_GTK=OFF \ -DBUILD_opencv_apps=OFF \ -DBUILD_ANDROID_EXAMPLES=OFF \ -DBUILD_ANDROID_PROJECTS=OFF \ -DBUILD_DOCS=OFF \ -DBUILD_EXAMPLES=OFF \ -DBUILD_PACKAGE=OFF \ -DBUILD_PERF_TESTS=OFF \ -DBUILD_TESTS=OFF \ -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE=../../android.toolchain.cmake \ ../ ``` 其中,`ANDROID_ABI` 表示 Android 平台架构,这里设置为 `armeabi-v7a`,表示 ARMv7 架构;`ANDROID_PLATFORM` 表示 Android 平台版本,这里设置为 `android-21`;`ANDROID_TOOLCHAIN` 表示使用的工具链,这里设置为 `clang`;`ANDROID_STL` 表示使用的 C++ 标准库,这里设置为 `c++_static`,表示静态链接;`WITH_OPENCL`、`WITH_IPP`、`WITH_TBB`、`WITH_MATLAB`、`WITH_CUDA`、`WITH_GTK` 分别表示是否启用 OpenCL、IPP、TBB、MATLAB、CUDA、GTK 等功能,这里都设置为 `OFF`;`BUILD_opencv_apps`、`BUILD_ANDROID_EXAMPLES`、`BUILD_ANDROID_PROJECTS`、`BUILD_DOCS`、`BUILD_EXAMPLES`、`BUILD_PACKAGE`、`BUILD_PERF_TESTS`、`BUILD_TESTS` 分别表示是否编译 OpenCV 应用程序、Android 示例、Android 项目、文档、示例、打包、性能测试、测试,这里都设置为 `OFF`;`OPENCV_EXTRA_MODULES_PATH` 表示 OpenCV Contrib 目录的路径;`CMAKE_BUILD_TYPE` 表示编译类型,这里设置为 `Release`;`CMAKE_TOOLCHAIN_FILE` 表示使用的交叉编译工具链文件。 5. 运行以下命令,编译生成 OpenCV Android 库: ``` make -j4 ``` 其中,`-j4` 表示使用 4 个核心进行编译。 6. 在 build 目录下会生成一个 `sdk` 目录,其中包含编译好的 OpenCV Android 库。 可以将该库导入到 Android Studio 中,然后在项目中使用该库提供的函数进行开发。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值