c++ - 在 OpenCV C++ 中使用 gpu::GpuMat

标签 c++ opencv image-processing cuda gpu

我想知道如何修改 gpu::GpuMat。事实上,我想知道是否可以像 cv::Mat 一样使用 gpu::GpuMat

我想做这样的事情:

    cv::namedWindow("Result");
    cv::Mat src_host = cv::imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);
    cv::gpu::GpuMat dst, src;
    src.upload(src_host);


    for (unsigned int y = 0; y < src.rows; y++){
        for (unsigned int x = 0; x < src.cols; x++){
            src.at<uchar>(y,x) = 0;
        }
    }

    cv::Mat result_host;
    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;

这似乎是不可能的。有人知道替代方案吗? 每次我想制作一些东西时,我是否必须将我的 gpu::GpuMat 下载到 cv::Mat? 提前致谢

编辑:我可能会使用 gpu::PtrStepSz(必须测试...)

最佳答案

GpuMat 在 GPU 内存中分配。您不能从 CPU 代码修改它。你可以

  1. 将所有矩阵像素设置为相同的值(setTo 方法)。
  2. 使用cv::Mat在CPU上填充数据,然后上传到GpuMat
  3. 实现您自己的 CUDA 内核并在其中填充 GpuMat

关于c++ - 在 OpenCV C++ 中使用 gpu::GpuMat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17679470/

相关文章:

c++ - Visual Studio F5、ctrl+F5 或在 Visual Studio 之外运行有什么不同?

c++ - 如何强制循环执行另一次迭代归零并关闭循环?

c++ - 为什么我不能通过传入的类对象参数杀死 pthread

c++ - 将方法作为函数指针传递

c++ - opencv 保存从网络摄像头捕获的图像

qt - OpenCV、诺基亚和 Qt - 它会工作吗?

C# aforge 颜色检测

java - java中的图像中值阈值

image - 如何将图像添加到 PDF 的所有页面?

python - 图像校正 - OpenCV - Python