繁体   English   中英

在Nvidia NPP ImageCPU对象中设置像素值?

[英]Setting pixel values in Nvidia NPP ImageCPU objects?

Nvidia的性能基元(NPP)的图像处理的例子CUDA SDK分布 ,图像通常存储在CPU上ImageCPU对象,图像被存储在GPU上作为ImageNPP对象。

boxFilterNPP.cpp是使用这些ImageCPUImageNPP对象的CUDA SDK中的示例。

当使用像nppiFilter这样的过滤器(卷积)函数时,将过滤器定义为ImageCPU对象是ImageCPU 但是,我没有看到设置ImageCPU对象值的明确方法。

npp::ImageCPU_32f_C1 hostKernel(3,3); //allocate space for 3x3 convolution kernel 

//want to set hostKernel to [-1 0 1; -1 0 1; -1 0 1]

hostKernel[0][0] = -1;   //this doesn't compile
hostKernel(0,0) = -1;    //this doesn't compile
hostKernel.at(0,0) = -1; //this doesn't compile

如何手动将值放入ImageCPU对象?

笔记:

  • 我实际上没有在代码片段中使用nppiFilter ; 我只是提到nppiFilter是将值写入ImageCPU对象的一个​​激励性示例。
  • 所述boxFilterNPP.cpp例不涉及直接写入一个ImageCPU对象,因为nppiFilterBox是的一种特殊情况nppiFilter使用一个内置的高斯平滑滤波器(大概就像[1 1 1 1 1 1; 1 1 1] )。

要为像素/矩阵指定值:

hostKernel.pixels(0,0)[0].x = -1;

你说:“当使用像nppiFilter这样的过滤器(卷积)函数时,将过滤器定义为ImageCPU对象是有意义的。”

这是错误的,也是个坏主意。 图像数据通常以“行填充”格式存储,NPP的CUDA SDK样本附带的图像类确实使用专用的2D内存分配器,在每行的末尾添加填充字节。 这样,每行的第一个像素落在64字节对齐的地址上。 这是出于性能原因(在CPU和GPU上)。

另一方面,用于像nppiFilter这样的原语的内核数组需要紧密包装。 这就是为什么显示的代码不起作用的原因。

对于1通道(例如32f_C1 ),此方法有效:

hostKernel.pixels(0,0) = -1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM