0环境
- VS2019
- CMAKE
- cuda11.5
- cudnn
开着飞机上谷歌软件,用于下载依赖
1下载源码
https://github.com/opencv/opencv/releases/tag/3.4.9
https://github.com/opencv/opencv_contrib/releases/tag/3.4.9
下载
2 编译
设置路径和生成路径
点击configure
点击finish
等待结束
中间有一个警报,不是报错,忽略
3开始配置
3-1 添加cuda
由于使用的是opencv3.4.9 相对于cuda11.5太老了,一直没成功,这里关掉了
3-2 添加扩展库 注意路径 /
3-3 添加sifit 角点库
3-4 添加world库 编译到一个里面
3-5 选择编译版本
3-6 是否编译python可用的版本(默认选了,但是可不用)
去掉不要了(装有python环境中单独pip install opencv)
4-1 不要java(默认有 根据需求)
然后点击生成
请注意,开着某飞机上谷歌,而以保证这个过程中下载一些需要的文件,也可以根据后期报错记录,手动下载。
编译警告1
问题2 缺少没有下载好的库,需要手动下载
这些都是配置过程中没有自动下载下来的,需要手动去网址下载
从下载记录找哪些没被下载,手动下载好,放在对应位置
第一组
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/548e3c997a80d65f710b9048f1d33371e3a203ac/ffmpeg/opencv_ffmpeg.dll
放在
opencv_349/build/3rdparty/ffmpeg/opencv_ffmpeg.dll"
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/548e3c997a80d65f710b9048f1d33371e3a203ac/ffmpeg/opencv_ffmpeg_64.dll
放在
opencv_349/build/3rdparty/ffmpeg/opencv_ffmpeg_64.dll
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/548e3c997a80d65f710b9048f1d33371e3a203ac/ffmpeg/ffmpeg_version.cmake
另存为是txt格式,需要去掉txt
放在
opencv349/opencv_349/build/3rdparty/ffmpeg/ffmpeg_version.cmake
ippicv
win10
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28f8120a48b368b4/ippicv/ippicv_2019_win_intel64_20180723_general.zip
放在
opencv_349/build/3rdparty/ippicv
然后回自动转移到
opencv_349\.cache\ippicv\1d222685246896fe089f88b8858e4b2f-ippicv_2019_win_intel64_20180723_general.zip
ubuntu18
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28f8120a48b368b4/ippicv/ippicv_2019_lnx_intel64_general_20180723.tgz
放在
opencv-3.4.9/.cache/ippicv/c0bd78adb4156bbf552c1dfe90599607-ippicv_2019_lnx_intel64_general_20180723.tgz
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i"
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_bgm.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_bi.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_bgm_bi.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_hd.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_bgm_hd.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_binboost_064.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_128.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_binboost_128.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_256.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_binboost_256.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_lbgm.i
放到
opencv_349/build/downloads/xfeatures2d/boostdesc_lbgm.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_48.i
放到
/opencv_349/build/downloads/xfeatures2d/vgg_generated_48.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_64.i
放到
opencv_349/build/downloads/xfeatures2d/vgg_generated_64.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i
放到
opencv_349/build/downloads/xfeatures2d/vgg_generated_80.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_120.i
放到
opencv_349/build/downloads/xfeatures2d/vgg_generated_120.i
下载
https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat
win10放到
opencv_349/build/testdata/cv/face//face_landmark_model.dat
unbuntu18放到
opencv-3.4.9/build/share/OpenCV/testdata/cv/face//face_landmark_model.dat"
重新
点击
编译VS2019 生成
ubuntu18 cuda10.2 设置安装路径
问题3 cuda11找不到报错
1 2 3 4 | CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: CUDA_nppicom_LIBRARY (ADVANCED) |
解决方法:
因为cuda 11移除了nppicom库, 解决方法是,在opencv-x.x.x/cmake/文件夹下,找到OpenCVDetectCUDA.cmake文件,找到下述if(CUDA_FOUND)的位置,在下面加上去掉nppicom的库的指令(中间四行)。
查找
if(CUDA_FOUND)
里面添加4行
1 2 3 4 | if (CUDA_VERSION VERSION_GREATER_EQUAL "11.0" ) ocv_list_filterout(CUDA_nppi_LIBRARY "nppicom" ) ocv_list_filterout(CUDA_npp_LIBRARY "nppicom" ) endif() |
最终样子
继续往下打开vs2019编译
问题4 cuda11 部分头文件找不到报错
https://blog.csdn.net/weixin_46353422/article/details/118196866
make编译的时候报错:
fatal error: dynlink_nvcuvid.h: No such file or directory
解决方法:
出错在: opencv-x.x.x的modules目录下
modules/cudacodec/src/precomp.hpp
modules/cudacodec/src/frame_queue.hpp
modules/cudacodec/src/cuvid_video_source.hpp
modules/cudacodec/src/video_decoder.hpp
modules/cudacodec/src/video_parser.hpp
首先下载 nvidia-sdk将其中的 nvcuvid.h, cuviddec.h copy 到 /usr/local/cuda-11.0/include/
sudo cp cuviddec.h /usr/local/cuda-11.0/include
sudo cp nvcuvid.h /usr/local/cuda-11.0/include
1
2
同时将上面几个hpp中代码 if CUDA_VERSION >= 9000 改为:
#if CUDA_VERSION >= 9000 && CUDA_VERSION < 10000
1
或者出现类似的错误 也是按照同样的方式进行更改
其实简单说就是放弃新的头文件dynlink_nvcuvid.h,使用原始的头文件 nvcuvid.h
2.make编译100%Warning中止时需要等很长一段时间自已会编译完的,此处并没有错误。所以等待就好
第一个报错 解决方案
https://stackoverflow.com/questions/46584000/cmake-error-variables-are-set-to-notfound
1) 寻找符合以下条件的行:
1 | find_cuda_helper_libs(nppi) |
并将其替换为以下行:
1 2 3 4 5 6 7 8 9 10 | find_cuda_helper_libs(nppial) find_cuda_helper_libs(nppicc) find_cuda_helper_libs(nppicom) find_cuda_helper_libs(nppidei) find_cuda_helper_libs(nppif) find_cuda_helper_libs(nppig) find_cuda_helper_libs(nppim) find_cuda_helper_libs(nppist) find_cuda_helper_libs(nppisu) find_cuda_helper_libs(nppitc) |
我尝试了以下方法并且成功了:
FindCUDA.cmake
在库中更改nppi
为几个拆分的。这必须在 3 个地方完成。请记住,此更改只是为了使其与 CUDA 9.0 一起使用,我不会检查版本或任何内容,如果您打算将其提供给具有不同 CUDA 版本的不同人,则应该这样做。
1) 寻找符合以下条件的行:
find_cuda_helper_libs(nppi)
并将其替换为以下行:
find_cuda_helper_libs(nppial)
find_cuda_helper_libs(nppicc)
find_cuda_helper_libs(nppicom)
find_cuda_helper_libs(nppidei)
find_cuda_helper_libs(nppif)
find_cuda_helper_libs(nppig)
find_cuda_helper_libs(nppim)
find_cuda_helper_libs(nppist)
find_cuda_helper_libs(nppisu)
find_cuda_helper_libs(nppitc)
2)找到行
1 | set (CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}" ) |
并将其更改为
1 | set (CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}" ) |
3)找到未设置的变量并添加新变量所以,找到
1 | unset(CUDA_nppi_LIBRARY CACHE) |
并将其更改为:
1 2 3 4 5 6 7 8 9 10 | unset(CUDA_nppial_LIBRARY CACHE) unset(CUDA_nppicc_LIBRARY CACHE) unset(CUDA_nppicom_LIBRARY CACHE) unset(CUDA_nppidei_LIBRARY CACHE) unset(CUDA_nppif_LIBRARY CACHE) unset(CUDA_nppig_LIBRARY CACHE) unset(CUDA_nppim_LIBRARY CACHE) unset(CUDA_nppist_LIBRARY CACHE) unset(CUDA_nppisu_LIBRARY CACHE) unset(CUDA_nppitc_LIBRARY CACHE) |
此外,OpenCVDetectCUDA.cmake
您还必须删除不再受支持的 2.0 架构。
它有:
1 2 3 4 5 6 7 | ... set (__cuda_arch_ptx "") if (CUDA_GENERATION STREQUAL "Fermi" ) set (__cuda_arch_bin "2.0" ) elseif(CUDA_GENERATION STREQUAL "Kepler" ) set (__cuda_arch_bin "3.0 3.5 3.7" ) ... |
它应该是:
基本上删除了第一个 if 并且第一个 elif 变成了一个 if。
1 2 3 4 5 6 7 | ... set (__cuda_arch_ptx "") if (CUDA_GENERATION STREQUAL "Kepler" ) set (__cuda_arch_bin "3.0 3.5 3.7" ) elseif(CUDA_GENERATION STREQUAL "Maxwell" ) set (__cuda_arch_bin "5.0 5.2" ) ... |
同时修改,去掉2.0
1 | set (__cuda_arch_bin "2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1" ) |
修改后
1 | set (__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2 6.0 6.1" ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2020-01-28 Python获取指定文件夹下的文件名