目录
系统配置:
配置步骤:
常见问题:
win10 家庭版
Vsual Studio 2019 community
Cmake 3.22
Intel OneAPI 2022
opencv 4
CUDA 10.2
CUDNN 8.2
1.安装好基本依赖项(VS2019,OneAPI,CUDA等),在github上使用如下指令下载opencv4源码以及对应的opencv_contrib。
git clone --recursive -b 4.x https://github.com/opencv/opencv.git
git clone --recursive -b 4.x https://github.com/opencv/opencv_contrib.git
本文将opencv_contrib放在opencv的根目录下:
2.打开Cmake,选择opencv路径,编译在opencv目录下的build文件夹中,点击configure按钮进行编译。
在弹出的窗口中选择VS2019编译器和x64平台,点击finish按钮,等待第一次编译完成。
3.第一次编译完成后一般会出现以下界面,其中configue done 表示编译成功:
4.接下来需要配置MKL,CUDA等环境。首先选择BUILD_opencv_world是为了最后生成的dll文件能够整合成一个,避免生成太多给配置环境带来麻烦。
配置MKL相关模块,MKL目录在默认安装的情况下会安装在以下路径中:
C:/Program Files (x86)/Intel/oneAPI/mkl/2022.0.3
为了编译opencv_contrib模块,需要勾选OPENCV_ENABLE_NONFREE,并选择opencv_contrib目录,值得注意的是需要选择opencv_contrib/modules目录,否则会找不到对应的模块
勾选编译CUDA加速模块
由于没有安装EIGEN和VTK,因此取消勾选WITH_EIGEN和WITH_VTK。
5. 基本配置完成后,此时LAPACK相关的路径为空
再次点击configue按钮,configue完成后会有许多新的模块出现:
此时可以发现MKL、TBB以及LAPACK相关路径已经配置完成。
此外可以勾选CUDA_FAST_MATH选项
6.再次点击configue按钮,等待configue完成,完成后点击generate按钮,生成VS2019的项目工程。
7.点击 Open Project按钮打开项目。选择需要编译的版本,此处以release为例,点击生成项目,等待完成。
8.全部编译成功会出现如下信息:
9.编译INSTALL工程,可以将生成的opencv_world依赖项安装至build/install目录下。
1.错误 C2660 “cvtest::createMat”: 函数不接受 5 个参数 opencv_test_cudaarithm F:\library\opencv455\opencv_contrib\modules\cudaarithm\test\test_gpumat.cpp 414
主要原因是官网下载的4.5.5源码中缺少了一个5个参数的createMat的函数,如下图所示。
在github中4.x分支中包含了这个函数,如下图所示。
2.在Cmake过程中出现FFMPEG等依赖文件或者模型文件下载失败,有两种解决方法,其一比较简单,在此处下载依赖文件,放至Cmake中设置的下载目录中,如下图所示
第二种麻烦一些,打开build目录下的CMakeDownloadLog.txt文件,查看其中的下载信息,以opencv_videoio_ffmpeg_64.dll为例,如下所示,文件中给出了opencv_videoio_ffmpeg_64.dll的下载地址https://raw.githubusercontent.com/opencv/opencv_3rdparty/4d348507d156ec797a88a887cfa7f9129a35afac/ffmpeg/opencv_videoio_ffmpeg_64.dll此时,只需将该链接复制至浏览器的地址栏即可下载,下载完成后需要将文件名修改为20deefbfe023c8b8d11a52e5a6527c6a-opencv_videoio_ffmpeg_64.dll。此外,值得注意的是ffmpeg_version.cmake的链接会直接显示出文件的内容,此时需要右键保存为ffmpeg_version.cmake文件或者ffmpeg_version.cmake.txt文件,如果自行创建ffmpeg_version.cmake无法通过md5的检查。
#do_copy "opencv_videoio_ffmpeg_64.dll" "20deefbfe023c8b8d11a52e5a6527c6a" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/4d348507d156ec797a88a887cfa7f9129a35afac/ffmpeg/opencv_videoio_ffmpeg_64.dll" "F:/library/opencv455/build/3rdparty/ffmpeg"
#missing "F:/library/opencv455/build/3rdparty/ffmpeg/opencv_videoio_ffmpeg_64.dll"
#check_md5 "F:/library/opencv455/.cache/ffmpeg/20deefbfe023c8b8d11a52e5a6527c6a-opencv_videoio_ffmpeg_64.dll"
#mismatch_md5 "F:/library/opencv455/.cache/ffmpeg/20deefbfe023c8b8d11a52e5a6527c6a-opencv_videoio_ffmpeg_64.dll" "d41d8cd98f00b204e9800998ecf8427e"
#delete "F:/library/opencv455/.cache/ffmpeg/20deefbfe023c8b8d11a52e5a6527c6a-opencv_videoio_ffmpeg_64.dll"
#cmake_download "F:/library/opencv455/.cache/ffmpeg/20deefbfe023c8b8d11a52e5a6527c6a-opencv_videoio_ffmpeg_64.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/4d348507d156ec797a88a887cfa7f9129a35afac/ffmpeg/opencv_videoio_ffmpeg_64.dll"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Could not resolve host: raw.githubusercontent.com
# Closing connection 0