【问题标题】:Load image in C to unsigned char将C中的图像加载到无符号字符
【发布时间】:2012-06-12 16:33:37
【问题描述】:

我无法制作一个小程序来转换为灰度。我必须将 BMP 文件加载到 unsigned char 并将其发送到 CUDA 函数(我发现了这个:http://www.mindfiresolutions.com/Image-Processing-with-CUDA-650.php)。

我使用过 CImg,但它无法将值保存为 unsigned char 并发送到 CUDA 函数(返回值不是灰度图像)。 如何将图像加载到 unsigned char 为

px[0] = R , px[1] = G, px[2] = B, px[3] = A 等等。

也许我正在测试太小的图像? (10 x 10 像素)。

【问题讨论】:

  • 在gimp中打开文件,另存为binary PGM format。那么你在阅读时需要做的就是找到标题的结尾。
  • @pQB 有点像。似乎整个问题都围绕着 CUDA - 我正要重新添加标签。再说一次,我很难弄清楚我自己到底是什么问题:)
  • 您的问题是从文件加载图像的部分吗?如果是这样,那么您只需要一个库。
  • @MichaelDorgan 这个问题与如何将图像加载到无符号字符有关。也许我错了,但毫无疑问 CUDA。问题似乎是如何从 RGB 转换为灰度。说,如果问题是关于CPU-GPU内存传输或内核中的逻辑,应该添加到问题中。
  • CImg 成员函数将图像像素返回为由无符号整数组成的 T 结构。你想调用什么 cuda 函数?

标签: c++ c image image-processing cuda


【解决方案1】:

第一步是将图像文件加载到内存中

如果是bmp,有一个很简单的bitmap loading lib。然后,一旦在 CPU 上将其作为 unsigned char[] 数组,您就可以使用任何 CUDA 函数将其复制到 GPU 并对其进行处理。

opencv image processing 库现在很好地支持 CUDA,它的 GPU 图像格式是开始在 CUDA 中编写自己的图像处理任务的好地方。

当然,它具有您可能想要的所有加载/保存/显示功能。

【讨论】:

    【解决方案2】:

    很久以前我写过cuda-grayscale,这是一个演示应用程序,展示了如何集成OpenCV和CUDA:它使用OpenCV从磁盘加载图像,并使用CUDA将其转换为灰度。

    您可以下载并查看project page 上的代码。基本上,我创建了一个新的float 数组来存储原始的unsigned char 数据并将其发送到GPU 进行处理。

    【讨论】:

      猜你喜欢
      • 2013-04-02
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      相关资源
      最近更新 更多