1. Introdução
Este artigo se concentrará na montagem e instalação do
OpenCV 4 para
C / C ++ ,
Python 2 e
Python 3 a partir de arquivos de origem com módulos
CUDA 10 adicionais no
Windows .
Tentei incluir aqui todas as sutilezas e nuances que você pode encontrar durante a instalação e sobre as quais não estão escritas no
manual oficial .

A montagem foi testada para:
- Windows 8.1 + Visual Studio 2017 + Python 2/3 + CUDA 10.0 + GeForce 840m
- Windows 10 + Visual Studio 2019 + Python 2/3 + CUDA 10.0 + GeForce GTX 1060
Atenção! A compilação não funcionará para a versão
OpenCV 4.0.1 e / ou
CUDA abaixo da versão 10.
O CUDA 9 e abaixo é suportado pelo
OpenCV 3 .
O que você precisa instalar
As seguintes ferramentas foram usadas na minha montagem:
- CMake 3.15
- Ferramentas do MS Visual Studio 2019 de 64 bits + CMake C ++ para Windows
- Python 3.7.3 de 64 bits + NumPy de 64 bits
- Python 2.7.16 de 64 bits + NumPy de 64 bits
- CUDA 10.0
- CuDNN 7.6.2
- OpenCV 4.1.1 e OpenCV-contrib-4.1.1
Instalação
Como a instalação é feita por meio de comandos do console, você deve executar com cuidado e precisão todas as etapas. Além disso, se necessário, altere os caminhos de instalação para você.
Primeiro você precisa instalar o software necessário, e o
Visual Studio deve ser instalado antes do
CUDA :
Após instalar todos os componentes, verifique se os caminhos para
CMake, Visual Studio, Python, CUDA, CuDNN estão escritos nas variáveis
PATH, PYTHONPATH, CUDA_PATH e
cudnn, respectivamente.
Em seguida, faça o download dos arquivos de origem
opencv-4.1.1 e
opencv-contrib-4.1.1 para o local desejado (no meu caso, este é
C: \ OpenCV \ ).
git clone https://github.com/opencv/opencv.git -b "4.1.1" git clone https://github.com/opencv/opencv_contrib.git -b "4.1.1"

Crie a
compilação / pasta dentro do opencv-4.1.1.

Em seguida, geramos arquivos de montagem usando
cmake . Usaremos a versão do console do
cmake , pois o
cmake-gui confunde os tipos de algumas variáveis (por exemplo,
OPENCV_PYTHON3_VERSION ) e, como resultado, gera arquivos incorretamente.
Abrimos o console no caminho
C: \ OpenCV \ e registramos as variáveis.
set "opencvSource=opencv-4.1.1" set "opencvExtraModules=opencv_contrib-4.1.1/modules" set "opencvBuild=%opencvSource%\build" set "compiler=Visual Studio 16 2019" set "buildType=Release"
Nota Para o
Visual Studio 2017, o gerador é escrito como "
Visual Studio 15 2017 Win64 " e sem o sinalizador
-A .
Você também pode especificar explicitamente as bibliotecas Python para python 2 e python 3, caso o coletor não as encontre automaticamente.
set "python2_executable=C:/Python27/python.exe" set "python2_include_dir=C:/Python27/include" set "python2_library=C:/Python27/libs/python27.lib" set "python2_numpy_include_dirs=C:/Python27/Lib/site-packages/numpy/core/include" set "python2_packages_path=C:/Python27/Lib/site-packages" set "python3_executable=C:/Users/root/Anaconda3/python.exe" set "python3_include_dir=C:/Users/root/Anaconda3/include" set "python3_library=C:/Users/root/Anaconda3/libs/python37.lib" set "python3_numpy_include_dirs=C:/Users/root/Anaconda3/lib/site-packages/numpy/core/include" set "python3_packages_path=C:/Users/root/Anaconda3/Lib/site-packages"
Nota Observe que a biblioteca
NumPy deve ter a mesma profundidade de bits do
OpenCV . Verificar isso é fácil:
import numpy.distutils.system_info as sysinfo print(sysinfo.platform_bits)
Gere arquivos de montagem usando o comando longo abaixo. No caso de geração malsucedida ou erros após a execução do comando, a geração repetida deve ser executada limpando todos os arquivos em
build / e
.cache / .
cmake ^ -B"%opencvBuild%/" ^ -H"%opencvSource%/" ^ -G"%compiler%" ^ -Ax64 ^ -DCMAKE_BUILD_TYPE=%buildType% ^ -DBUILD_opencv_world=ON ^ -DINSTALL_TESTS=OFF ^ -DINSTALL_C_EXAMPLES=OFF ^ -DBUILD_EXAMPLES=OFF ^ -DOPENCV_EXTRA_MODULES_PATH="%opencvExtraModules%/" ^ -DBUILD_PROTOBUF=ON ^ -DBUILD_opencv_python_bindings_generator=ON ^ -DWITH_CUDA=ON ^ -DCUDA_FAST_MATH=ON ^ -DWITH_CUBLAS=ON ^ -DCUDA_ARCH_PTX=7.5 ^ -DBUILD_opencv_python2=ON ^ -DPYTHON2_EXECUTABLE="%python2_executable%" ^ -DOPENCV_PYTHON2_VERSION=2.7.16 ^ -DPYTHON2_INCLUDE_DIR="%python2_include_dir%" ^ -DPYTHON2_LIBRARY="%python2_library%" ^ -DPYTHON2_NUMPY_INCLUDE_DIRS="%python2_numpy_include_dirs%" ^ -DPYTHON2_PACKAGES_PATH="%python2_packages_path%" ^ -DBUILD_opencv_python3=ON ^ -DPYTHON3_EXECUTABLE="%python3_executable%" ^ -DOPENCV_PYTHON3_VERSION=3.7.3 ^ -DPYTHON3_INCLUDE_DIR="%python3_include_dir%" ^ -DPYTHON3_LIBRARY="%python3_library%" ^ -DPYTHON3_NUMPY_INCLUDE_DIRS="%python3_numpy_include_dirs%" ^ -DPYTHON3_PACKAGES_PATH="%python3_packages_path%"
O significado de algumas bandeiras- BUILD_opencv_world - um módulo opcional que contém cópias de todas as bibliotecas selecionadas durante a instalação. Isso é útil no desenvolvimento em C ++ , porque, em vez de conectar várias dependências opencv , você pode conectar uma dependência opencv_world411.lib ao projeto
- INSTALL_EXAMPLES / INSTALL_TESTS - instalando exemplos / testes de código opencv
- CUDA_FAST_MATH, WITH_CUBLAS - módulos adicionais para CUDA , projetados para acelerar cálculos
- CUDA_ARCH_PTX - versão das instruções PTX para melhorar o desempenho da computação
- OPENCV_EXTRA_MODULES_PATH - caminho para módulos adicionais do opencv-contrib (necessário para CUDA )
- BUILD_PROTOBUF - para que alguns módulos opencv funcionem, é necessário o Protobuf (o coletor opencv configurará BUILD_PROTOBUF = ON de qualquer maneira )
Após cerca de 10 minutos, as informações de montagem e as linhas finais “
Configurando Concluído” e “
Gerando Concluído ” devem aparecer no console. Verificamos todas as informações, especialmente as seções do
NVIDIA CUDA, Python 2, Python 3 .

Em seguida, coletamos a solução. Pode levar várias horas para criar, dependendo do processador e da versão do
Visual Studio .
cmake --build %opencvBuild% --target ALL_BUILD --config Release
Instale a solução.
cmake --build %opencvBuild% --target INSTALL --config Release
Após a instalação bem-sucedida, crie a variável de sistema
OPENCV_DIR com o valor
C: \ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc15 \ bin e adicione-a ao
PATH .
Teste
Testaremos a funcionalidade do
OpenCV com o módulo
CUDA usando um exemplo simples de multiplicação de matrizes.
Conectar o OpenCV a um projeto do Visual Studio- Defina o tipo de versão release / x64 (para Debug, crie OpenCV com o sinalizador Debug)
- Propriedades do projeto → C / C ++ → Geral → Inclua a linha “C: \ OpenCV \ opencv-4.1.1 \ build \ install \ include” em Diretórios de inclusão adicionais
- Propriedades do projeto → Vinculador → Geral → Inclua a linha “C: \ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc16 \ lib” nos diretórios adicionais da biblioteca
- Propriedades do projeto → Vinculador → Geral → Adicione “; opencv_world411.lib” (“; opencv_world411d.lib” para depuração) ao final de Dependências adicionais
Exemplo de Python 3 import numpy as np import cv2 as cv import time rand = np.random.random((1024, 1024)).astype(np.float32) h_array1 = np.stack([rand, rand],axis=2) h_array2 = h_array1 d_array1 = cv.cuda_GpuMat() d_array2 = cv.cuda_GpuMat() d_array1.upload(h_array1) d_array2.upload(h_array2) start = time.time() cv.cuda.gemm(d_array1, d_array2, 1, None, 0, None, 1) end = time.time() print("Time elapsed:", end - start, "sec")
Saída do console
Time elapsed: 0.3130002021789551
Exemplo C ++ #include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/cudaarithm.hpp> using namespace std; using namespace cv; using namespace cv::cuda; int main() { Mat h_array1 = Mat::ones(1024, 1024, CV_32FC2); Mat h_array2 = Mat::ones(1024, 1024, CV_32FC2); Mat h_array3 = Mat::zeros(1024, 1024, CV_32FC2); Mat h_result; GpuMat d_array1, d_array2, d_array3, d_result; d_array1.upload(h_array1); d_array2.upload(h_array2); const clock_t begin_time = clock(); cuda::gemm(d_array1, d_array2, 1.0, d_array3, 0.0, d_result); cout << "Time elapsed: " << (float(clock() - begin_time) / CLOCKS_PER_SEC) << " sec" << endl; d_result.download(h_result); return 0; }
Saída do console
Time elapsed: 0.354
Excluir
Para remover o
OpenCV , você precisa executar o comando
cmake --build %opencvBuild% --target uninstall --config Release
e remova a variável de sistema
OPENCV_DIR e remova o caminho para o OpenCV do
PATH .
Conclusão
Neste artigo, examinamos a instalação do
OpenCV 4 para
Windows 10 . Esse algoritmo foi testado no
Windows 8.1 e no
Windows 10 , mas, em teoria, pode ser construído no
Windows 7 . Para mais informações, consulte a lista de fontes abaixo.
PS Finalmente, traremos todos os comandos de instalação em um arquivo
.bat para aqueles que desejam automatizar a instalação.
install_opencv411.bat cd C:\OpenCV git clone https://github.com/opencv/opencv_contrib.git -b "4.1.1" git clone https://github.com/opencv/opencv.git -b "4.1.1" ren opencv opencv-4.1.1 ren opencv_contrib-4.1.1 set "opencvSource=opencv-4.1.1" set "opencvExtraModules=opencv_contrib-4.1.1/modules" set "opencvBuild=%opencvSource%\build" set "compiler=Visual Studio 16 2019" set "buildType=Release" set "python2_executable=C:/Python27/python.exe" set "python2_include_dir=C:/Python27/include" set "python2_library=C:/Python27/libs/python27.lib" set "python2_numpy_include_dirs=C:/Python27/Lib/site-packages/numpy/core/include" set "python2_packages_path=C:/Python27/Lib/site-packages" set "python3_executable=C:/Users/root/Anaconda3/python.exe" set "python3_include_dir=C:/Users/root/Anaconda3/include" set "python3_library=C:/Users/root/Anaconda3/libs/python37.lib" set "python3_numpy_include_dirs=C:/Users/root/Anaconda3/lib/site-packages/numpy/core/include" set "python3_packages_path=C:/Users/root/Anaconda3/Lib/site-packages" cmake ^ -B"%opencvBuild%/" ^ -H"%opencvSource%/" ^ -G"%compiler%" ^ -Ax64 ^ -DCMAKE_BUILD_TYPE=%buildType% ^ -DBUILD_opencv_world=ON ^ -DINSTALL_TESTS=OFF ^ -DINSTALL_C_EXAMPLES=OFF ^ -DBUILD_EXAMPLES=OFF ^ -DOPENCV_EXTRA_MODULES_PATH="%opencvExtraModules%/" ^ -DBUILD_PROTOBUF=ON ^ -DBUILD_opencv_python_bindings_generator=ON ^ -DWITH_CUDA=ON ^ -DCUDA_FAST_MATH=ON ^ -DWITH_CUBLAS=ON ^ -DCUDA_ARCH_PTX=7.5 ^ -DBUILD_opencv_python2=ON ^ -DPYTHON2_EXECUTABLE="%python2_executable%" ^ -DOPENCV_PYTHON2_VERSION=2.7.16 ^ -DPYTHON2_INCLUDE_DIR="%python2_include_dir%" ^ -DPYTHON2_LIBRARY="%python2_library%" ^ -DPYTHON2_NUMPY_INCLUDE_DIRS="%python2_numpy_include_dirs%" ^ -DPYTHON2_PACKAGES_PATH="%python2_packages_path%" ^ -DBUILD_opencv_python3=ON ^ -DPYTHON3_EXECUTABLE="%python3_executable%" ^ -DOPENCV_PYTHON3_VERSION=3.7.3 ^ -DPYTHON3_INCLUDE_DIR="%python3_include_dir%" ^ -DPYTHON3_LIBRARY="%python3_library%" ^ -DPYTHON3_NUMPY_INCLUDE_DIRS="%python3_numpy_include_dirs%" ^ -DPYTHON3_PACKAGES_PATH="%python3_packages_path%" cmake --build %opencvBuild% --target ALL_BUILD --config Release cmake --build %opencvBuild% --target INSTALL --config Release
Lista de fontes
- docs.opencv.org/4.1.1/d3/d52/tutorial_windows_install.html
- www.learnopencv.com/install-opencv-4-on-windows
- jamesbowley.co.uk/build-opencv-4-0-0-with-cuda-10-0-and-intel-mkl-tbb-in-windows
- lightbuzz.com/opencv-cuda
- Capítulo “Construindo bibliotecas a partir da origem” do livro Computer Hand-on Accelerated GPU Vision with OpenCV and CUDA