OpenCV+CUDA入门教程之一---概览

一、简介

CUDA是NVIDIA的并行计算库。OpenCV包含GPU(CUDA)模块,可以理解为一些OpenCV函数实现了CUDA版本,使用GPU加速,执行速度更快。

二、系列教程目录

  • OpenCV+CUDA入门教程之一---概览
  • OpenCV+CUDA入门教程之二---GPU模块简介
  • OpenCV+CUDA入门教程之三---初始化和设备信息
  • OpenCV+CUDA入门教程之四---数据类、数据类相关函数和同步类
  • OpenCV+CUDA入门教程之五---GpuMat详解
  • OpenCV+CUDA入门教程之六---访问GpuMat的每一个元素
  • OpenCV+CUDA入门教程之七---OpenCV的GPU模块的库函数

三、一个简单的例子

在下面的示例中,读file.png,然后上传到GPU,阈值化,下载和显示。运行以下代码需要配置带有CUDA模块的OpenCV。

main.cpp(OpenCV3)

//main.cpp
#include 
#include 
#include 
#include 

int main (int argc, char* argv[])
{
    try
    {
        /// 读取图片
        cv::Mat src_host = cv::imread("file.png", cv::IMREAD_GRAYSCALE);
        /// 定义GpuMat
        cv::cuda::GpuMat dst, src;
        /// 将主机内存的图像数据上传到GPU内存
        src.upload(src_host);

        /// 调用GPU的阈值函数(很多使用GPU加速的函数都和CPU版本的函数相同)
        cv::cuda::threshold(src, dst, 120, 255, cv::THRESH_BINARY);

        cv::Mat result_host;
        /// 从GPU上下载阈值化完成的图片
        dst.download(result_host);

        /// 显示
        cv::imshow("Result", result_host);
        cv::waitKey();
    }
    catch(const cv::Exception& ex)
    {
        std::cout << "Error: " << ex.what() << std::endl;
    }
    return 0;
}

CMakeLists.txt 

cmake_minimum_required(VERSION 3.0)

project(OCSample)

set(CUDA_USE_STATIC_CUDA_RUNTIME ON) #这一句解决 cannot find -lopencv_dep_cudart
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR})

find_package(CUDA REQUIRED)
message(STATUS "CUDA版本: ${CUDA_VERSION}")
message(STATUS "    头文件目录:${CUDA_INCLUDE_DIRS}")
message(STATUS "    库文件列表:${CUDA_LIBRARIES}")
set(CUDA_NVCC_FLAGS -G;-g;-std=c++11) # nvcc flags
include_directories(${CUDA_INCLUDE_DIRS})


set(OpenCV_DIR "/usr/local/opencv343-cuda90/share/OpenCV") # 指定OpenCV安装路径来区分不同的OpenCV版本
find_package(OpenCV REQUIRED)
set(OpenCV_LIB_DIR ${OpenCV_INSTALL_PATH}/lib)
message(STATUS "OpenCV版本: ${OpenCV_VERSION}")
message(STATUS "    头文件目录:${OpenCV_INCLUDE_DIRS}")
message(STATUS "    库文件目录:${OpenCV_LIB_DIR}")
message(STATUS "    库文件列表:${OpenCV_LIBS}")
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIB_DIR})


CUDA_ADD_EXECUTABLE(main main.cpp)
target_link_libraries(main ${OpenCV_LIBS} ${CUDA_LIBRARIES})

 

四、参考

  • GPU Module Documentation
  • Realtime Computer Vision with OpenCV

 

 

你可能感兴趣的:(OpenCV与CUDA混合编程)