はじめに: 本来、ubuntu18.0.4 には OpenCV3.2 が付属しているはずですが、何をしたのかわかりません、消えてしまいました (または、pencv4 にアップグレードされました)。!!ただし、melodic は opencv3.2 を使用しているため、バージョンの違いにより一部のライブラリ間で競合が発生します。opencv3.2を再インストールする予定(opencv4は削除せずに切り替え可能)
1.opencv3.2.0の依存関係をインストールします。
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install build-essential qt5-default ccache libv4l-dev libavresample-dev libgphoto2-dev libopenblas-base libopenblas-dev doxygen openjdk-8-jdk pylint libvtk6-dev
sudo apt-get install pkg-config
2.opencv3.2.0とopencv_contribをダウンロードします。
opencv3.2.0 github リンク
https://github.com/opencv/opencv/releases/tag/3.2.0
opencv_contrib github リンク
https://github.com/opencv/opencv_contrib/tags?after=3.4.3
これらを別々に解凍し、解凍された opencv_contrib を opencv3.2.0 のルート ディレクトリに置きます。
3. cuda9.2 のバージョンは比較的高く、opencv3.2.0 のコンパイルをサポートしていないため、opencv3.2.0 の一部のファイルを変更する必要があります。
A. opencv3.2.0 の cmake フォルダーで FindCUDA.cmake ファイルを見つけます。
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) コマンドラインを見つける
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
への変更
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) コマンドラインを見つける
unset(CUDA_nppi_LIBRARY CACHE)
への変更
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)
B. opencv3.2.0 の cmake でファイル OpenCVDetectCUDA.cmake を見つけます。
次のコマンドラインを変更します
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")
上記のコマンドを次のように変更します
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")
C. ヘッダー ファイル cuda_fp16.h を opencv3.2.0/modules/cudev/include/opencv2/cudev/common.hpp に追加します。
common.hppを追加
#include <cuda_fp16.h>
4. opencv3.2.0をcuda9.2でコンパイルします。
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv320 -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_CUDA=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D CUDA_NVCC_FLAGS="-D_FORCE_INLINES" -D WITH_CUBLAS=1 -D OPENCV_EXTRA_MODULES_PATH=/home/sharine/software/opencv-3.2.0/opencv_contrib-3.2.0/modules/ -D CUDA_GENERATION=Kepler -D OPENCV_ENABLE_NONFREE=True \..
make -j8
知らせ:
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv320
opencv のインストール場所を設定するコマンド
-D OPENCV_EXTRA_MODULES_PATH=/home/sharine/software/opencv-3.2.0/opencv_contrib-3.2.0/modules/
このコマンドは、opencv_contrib 内のモジュールのフォルダーの場所であり、独自のパスに従って設定されます。
5. ネットワークの問題により、多くのファイルが失われます。
# 下载后,放到 opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e 下
ippicv_linux_20151201.tgz
# 下载后,放到 opencv-3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/src 下
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i
これらのファイルのリソースは、私の github
https://github.com/SharineLee/opencv320-toolにあります。
ダウンロードしたファイルをopencv-3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/src
ディレクトリに配置します
ただし、プログラムのコンパイルを続行する場合は、上記のファイルをダウンロードしようとする可能性があります。
ここではコメントxfeatures2d/CMakeList.txt
の最後の 2 行が必要です (opencv3.4.0 ではコメントは必要ありません)。
include(cmake/download_vgg.cmake)
include(cmake/download_boostdesc.cmake)
それから保存します。そうすれば、cmake はエラーを報告しなくなります。
6. コンパイル
次のコマンドを使用してコンパイルしてインストールします
make -j8
sudo make install
(1)エラー1:
/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
cmakeし直す必要がある
そしてそれをcmakeオプションに追加します
-D ENABLE_PRECOMPILED_HEADERS=OFF
(2)エラー2:
fatal error: LAPACKE_H_PATH-NOTFOUND/lapacke.h: No such file or directory #include “LAPACKE_H_PATH-NOTFOUND/lapacke.h”
解決:
sudo apt-get install liblapacke-dev checkinstall
打开opencv-3.2.0/build/opencv_lapack.h
将第二行中的#include"LAPACKE_H_PATH-NOTFOUND/lapacke.h" 修改为#include"lapacke.h"
(3)エラー3:
[ 92%] Linking CXX executable ../../bin/opencv_test_sfm
../../lib/libopencv_sfm.so.3.4.10:对‘google::InitVLOG3__(int**, int*, char const*, int)’未定义的引用
../../lib/libopencv_sfm.so.3.4.10:对‘google::kLogSiteUninitialized’未定义的引用
BUILD で TEST 項目を閉じるとパス-DBUILD_TESTS=OFF
できます。
7. ROS プロジェクトで使用される
(1) Melodic がインストールされている opencv3.2.0 を見つけるには、システムにインストールされている opencv3.2.0 フォルダーをリンクする必要があります/usr/include/opencv
。
sudo ln -s /usr/local/opencv320 /usr/include/opencv
(2) Melodic が opencv2 を見つけるために (致命的なエラー: opencv2/opencv.hpp: そのようなファイルまたはディレクトリはありません)
sudo ln -s /usr/local/opencv320/opencv2 /usr/include/opencv2
(3) ros ワークスペースに opencv3.2.0 を検出させるために、次のようにCmakeList.txt
変更
します。find_package(OpenCV REQUIRED)
find_package(OpenCV 3 REQUIRED)
参考
https://blog.csdn.net/weixin_51925771/article/details/121120677
https://zhuanlan.zhihu.com/p/367323296
https://blog.csdn.net/qq_41246375/article/details/119487839
https:/ /blog.csdn.net/weixin_43409736/article/details/121096223