opencv_GPU版本编译

opencv_GPU版本编译

1编译前准备:

电脑需先安装nvidia独立显卡驱动以及cuda. 此电脑配置如下:

显卡型号GTX1650
显卡驱动版本Driver Version: 450.80.02
CUDA版本release 10.0, V10.0.130

现在opencv3.2以及OpenCV3.2_contrib, 下载地址: https://github.com/opencv ,下载后解压,将contrib模块放进opencv3.2文件夹里面.

2修改文件

编辑 /opencv-3.2.0/cmake/FindCUDA.cmake:

找到 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)

找到 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}")

找到: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)

编辑: /opencv-3.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")
  ...

找到 set(__cuda_arch_bin "2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1")

替换成 set(__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2 6.0 6.1")

编辑:opencv-3.2.0/modules/cudev/include/opencv2/cudev/common.hpp

增加下面的头文件:#include <cuda_fp16.h>

3 编译安装

拷贝下面命令的时候-D CUDA_ARCH_BIN=7.5 需根据自己电脑的配置来修改(一定要加这个选项,要不然编译出来的库没办法使用), 例如我的电脑显卡是GTX1650(查询网址:https://developer.nvidia.com/cuda-gpus),算力为7.5,因此这里填写的是7.5.

cd opencv-3.2.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/media/kfr/新加卷/opencv-3.2.0/opencv_contrib-3.2.0/modules -D CUDA_ARCH_BIN=7.5 -D WITH_CUDA=ON -D WITH_TBB=ON -D  WITH_V4L=OFF -D  WITH_LIBV4L=ON  -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_QT=OFF -D WITH_NVCUVID=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF ..
make -j8
sudo make install

简单测试

在文件夹下创建文件 opencv_cuda_test.cpp以及CMakeLists.txt.文件内容如下:

opencv_cuda_test.cpp内容:

#include <iostream>
#include <ctime>
#include <cmath>
#include "bits/time.h"

//#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>

#include <opencv2/core/cuda.hpp>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/cudaimgproc.hpp>

#define TestCUDA true

int main()
{
    std::clock_t begin = std::clock();

    try {
        cv::Mat srcHost = cv::imread("../1.png",CV_LOAD_IMAGE_GRAYSCALE);

        for(int i=0; i<1000; i++) {
            if(TestCUDA) {
                cv::cuda::GpuMat dst, src;
                src.upload(srcHost);

                //cv::cuda::threshold(src,dst,128.0,255.0, CV_THRESH_BINARY);
                cv::cuda::bilateralFilter(src,dst,3,1,1);

                cv::Mat resultHost;
                dst.download(resultHost);
            } else {
                cv::Mat dst;
                cv::bilateralFilter(srcHost,dst,3,1,1);
            }
        }

        //cv::imshow("Result",resultHost);
        //cv::waitKey();

    } catch(const cv::Exception& ex) {
        std::cout << "Error: " << ex.what() << std::endl;
    }

    std::clock_t end = std::clock();
    std::cout << double(end-begin) / CLOCKS_PER_SEC  << std::endl;
}

CMakeLists.txt内容:

cmake_minimum_required(VERSION 3.4)

project(cuda_test)
find_package(OpenCV 3 REQUIRED)
find_package(CUDA 10 REQUIRED)

include_directories(
        ${OpenCV_DIR}
        ${CUDA_INCLUDE_DIRS}
)

if (NOT CUDA_FOUND)
  message(STATUS "CUDA not found. Project will not be built.")
endif(NOT CUDA_FOUND)

# GTX1650显卡算力为 7.5 查询网址:https://developer.nvidia.com/zh-cn/cuda-gpus
SET(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-gencode arch=compute_75,code=sm_75;-std=c++11;)

LINK_DIRECTORIES(/usr/lib
    /usr/local/lib)
    
add_executable(opencv_cuda_test opencv_cuda_test.cpp)
target_link_libraries( opencv_cuda_test ${OpenCV_LIBS} ${CUDA_cudadevrt_LIBRARY})


然后 编译运行, cmake . && make && ./opencv_cuda_test,能正常编译通过并且运行说明GPU版本的opencv安装成功.

参考链接

https://stackoverflow.com/questions/46584000/cmake-error-variables-are-set-to-notfound

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Linux下编译OpenCV GPU版本,您需要遵循以下步骤: 1. 安装CUDA 首先,您需要安装CUDA(Compute Unified Device Architecture)工具包。您可以从NVIDIA官网下载适合您操作系统的CUDA版本,然后按照官方文档的说明进行安装。 2. 安装OpenCV 安装OpenCV的方法因操作系统而异。在Ubuntu上,您可以使用以下命令安装OpenCV: ``` sudo apt-get install libopencv-dev ``` 如果您使用的是其他Linux发行版,可以参考OpenCV官方文档中的说明进行安装。 3. 编译OpenCV with GPU支持 为了启用OpenCVGPU支持,您需要将WITH_CUDA选项设置为ON。在编译过程中,您还需要指定CUDA安装路径,以及用于GPU计算的架构和代码生成选项。以下是一个示例CMake命令: ``` cmake -D WITH_CUDA=ON \ -D CUDA_ARCH_BIN="<arch>" \ -D CUDA_ARCH_PTX="<arch>" \ -D CUDA_GENERATION="<code_gen>" \ -D CUDA_TOOLKIT_ROOT_DIR="<cuda_install_path>" \ <opencv_source_path> ``` 其中,`<arch>`表示您要支持的GPU架构,例如`sm_50`;`<code_gen>`表示用于生成GPU代码的CUDA版本,例如7.0;`<cuda_install_path>`是CUDA的安装路径,在Ubuntu上通常是`/usr/local/cuda`;`<opencv_source_path>`是OpenCV源代码的路径。 4. 编译和安装OpenCV 完成上述设置后,运行以下命令编译和安装OpenCV: ``` make -j8 sudo make install ``` 在编译和安装过程中,您可以根据需要调整并行编译的线程数(`-j`选项)。 完成上述步骤后,您就可以在OpenCV中使用GPU加速了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值