LoginSignup
4
2
この記事誰得? 私しか得しないニッチな技術で記事投稿!

Cudaに対応したOpenCVのビルド方法(OpenCV with Cuda)

Last updated at Posted at 2023-07-14

Cudaに対応したOpenCVのビルド方法

Cudaに対応したOpenCVを使おうとしたところ、少し苦戦したので備忘録代わりにおいておきます。

OpenCVでCudaを使うにはビルド時に指定する必要がある

通常通りにOpenCVを導入した後にGPUを使わせようと思っても以下のエラーが出て使えません。

what():  OpenCV(4.8.0-dev) /home/Desktop/include/opencv/modules/core/include/opencv2/core/private.cuda.hpp:106: error: (-216:No CUDA support) The library is compiled without CUDA support in function 'throw_no_cuda'

OpenCVをCudaに対応させるには、コンパイルをする前にcmakeでCudaを使うように設定を変える必要があります。

条件の指定方法は下記のサイトを参考にしてください。
今回私はCuda11.6、OpenCV4.5.5を使ってビルドを行っています。

さて、ここでサイトに従ってmakeを行うと、以下のようなエラーが出ました。

  435 |         function(_Functor&& __f)
      |                                                                                                                                                 ^ 
/usr/include/c++/11/bits/std_function.h:435:145: note:         ‘_ArgTypes’
/usr/include/c++/11/bits/std_function.h:530:146: error: parameter packs not expanded with ‘...’:
  530 |         operator=(_Functor&& __f)
      |                                                                                                                                                  ^ 
/usr/include/c++/11/bits/std_function.h:530:146: note:         ‘_ArgTypes’

CMake Error at cuda_compile_1_generated_gpu_mat_nd.cu.o.Release.cmake:280 (message):
  Error generating file  /home/Downloads/install_opencv_with_cuda/opencv/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat_nd.cu.o

C++11を使ってそのままコンパイルするとエラーが生じる

調べてみたところ、下記のサイトに同じエラーの解決策が示してありました。

どうやらコンパイラのせいでエラーが生じているみたいです。
私はg++10を使ってコンパイルするようにしました。
とりあえず自分用に、opencvのインストールからmakeまですべてのコマンドを載せておきます。

wget -O opencv.zip https://github.com/opencv/opencv/archive/refs/tags/4.5.5.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.5.zip
unzip opencv.zip
unzip opencv_contrib.zip
cd opencv && mkdir build && cd build

CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 CUDA_PATH="/usr/local/cuda-11.6" CFLAGS="-I/usr/local/cuda-11.6/include" LDFLAGS="-L/usr/local/cuda-11.6/lib64" \
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D WITH_TBB=ON \
-D BUILD_opencv_cudacodec=OFF \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUDA=ON \
-D WITH_CUBLAS=1 \
-D WITH_V4L=ON \
-D WITH_QT=OFF \
-D WITH_OPENGL=ON \
-D WITH_GSTREAMER=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_PC_FILE_NAME=opencv.pc \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_EXAMPLES=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=8.6 .. 

CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 CUDA_PATH="/usr/local/cuda-11.6" CFLAGS="-I/usr/local/cuda-11.6/include" LDFLAGS="-L/usr/local/cuda-11.6/lib64" make -j16

sudo make install

CUDA_ARCH_BINの値に関してはこちらから調べてください。

Cudaに対応したOpenCVのビルド方法は下記サイトが一番詳しいです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2