cv::cuda::GpuMat()

cv::cuda::GpuMat 是 OpenCV 库中的一个类,用于在 GPU 上存储和处理图像数据,使得用户能够利用 GPU 加速图像处理算法。

特点:
1:GPU 内存管理:cv::cuda::GpuMat 是一个封装了 GPU 内存的类,它允许用户直接在 GPU 上分配、释放和操作图像数据。
2:高效的数据传输:该类提供了在 CPU 和 GPU 之间高效传输数据的方法,如 upload() 和 download(),这些方法用于将数据从 CPU 内存传输到 GPU 内存,或者从 GPU 内存传输回 CPU 内存。
3:与 CPU 上的 cv::Mat 兼容:cv::cuda::GpuMat 的设计使其与 CPU 上的 cv::Mat 类兼容,便于在两者之间进行转换和操作。
4:CUDA 加速的图像处理函数:OpenCV CUDA 模块提供了一系列 CUDA 加速的图像处理函数,这些函数可以直接操cv::cuda::GpuMat 对象。

将图片从CPU内存加载到GPU内存

    cv::cuda::GpuMat gpu_image;  
    gpu_image.upload(host_image);  // 将图像从 CPU 内存上传到 GPU 内存  

或者

   cv::cuda::GpuMat gpu_img1(host_image); 

语句cv::cuda::GpuMat gpu_img1(img1);做了以下几件事情:
1:它声明了一个cv::cuda::GpuMat类型的变量gpu_img1。
2:它使用img1这个cv::Mat对象来初始化gpu_img1。这里,img1应该是一个已经加载到内存中的图像。
3:在初始化过程中,图像数据img1会被上传到GPU的显存中,以便后续在GPU上进行处理。

需要注意的是,这个操作只是创建了一个GPU上的图像容器并将数据从CPU内存复制到GPU显存,并没有实际改变图像的内容或执行任何图像处理操作。

将图片从GPU内存加载到CPU内存

    cv::Mat result_host;  
    gpu_result.download(result_host);  // 将处理后的图像从 GPU 内存下载到 CPU 内存  

或者

   cv::Mat result(gpu_result);

完整示例

#include <opencv2/opencv.hpp>  
#include <opencv2/cudaimgproc.hpp>  
  
int main()  
{  
    cv::Mat host_image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);  
    if (host_image.empty())  
    {  
        std::cerr << "Error: Could not read image file." << std::endl;  
        return -1;  
    }  
  
    cv::cuda::GpuMat gpu_image;  
    gpu_image.upload(host_image);  // 将图像从 CPU 内存上传到 GPU 内存  
  
    // 在 GPU 上执行图像处理操作(例如,使用 CUDA 加速的滤波器)  
    cv::cuda::GpuMat gpu_result;  
    cv::cuda::CannyEdgeDetector detector(50, 150);  
    detector.detect(gpu_image, gpu_result);  
  
    cv::Mat result_host;  
    gpu_result.download(result_host);  // 将处理后的图像从 GPU 内存下载到 CPU 内存  
  
    // 显示或保存结果图像  
    cv::imshow("Result", result_host);  
    cv::waitKey(0);  
  
    return 0;  
}

注意:要使用 OpenCV 的 CUDA 模块,你需要在编译时链接到相应的 CUDA 库,并且你的系统需要安装有支持 CUDA 的 NVIDIA GPU 和相应的 CUDA 工具包。

GitHub 加速计划 / opencv31 / opencv
189
14
下载
OpenCV: 开源计算机视觉库
最近提交(Master分支:7 个月前 )
09a85e97 Update js_houghcircles_HoughCirclesP.html 1 天前
e826a41e Dropped inefficient (disabled) IPP integration for LUT. 1 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐