C++ 在Nvidia NPP ImageCPU对象中设置像素值?
在中的图像处理示例中,图像通常作为C++ 在Nvidia NPP ImageCPU对象中设置像素值?,c++,image-processing,cuda,nvidia,C++,Image Processing,Cuda,Nvidia,在中的图像处理示例中,图像通常作为ImageCPU对象存储在CPU上,并且图像作为ImageNPP对象存储在GPU上 是CUDA SDK中使用这些ImageCPU和ImageNPP对象的示例 当使用像nppiFilter这样的过滤器(卷积)函数时,将过滤器定义为ImageCPU对象是有意义的。但是,我看不到设置ImageCPU对象值的明确方法 npp::ImageCPU_32f_C1 hostKernel(3,3); //allocate space for 3x3 convolution ke
ImageCPU
对象存储在CPU上,并且图像作为ImageNPP
对象存储在GPU上
是CUDA SDK中使用这些ImageCPU
和ImageNPP
对象的示例
当使用像nppiFilter
这样的过滤器(卷积)函数时,将过滤器定义为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
- 该示例不涉及直接写入
对象,因为ImageCPU
是nppiFilterBox
的特例,它使用内置的高斯平滑滤波器(可能类似于[11;11;11])nppiFilter
hostKernel.pixels(0,0)[0].x = -1;
您的意思是:“当使用像nppiFilter这样的过滤器(卷积)函数时,将过滤器定义为ImageCPU对象是有意义的。”
这是错误的想法。图像数据通常以“行填充”格式存储,CUDA SDK NPP示例附带的图像类使用专门的2D内存分配器,在每行末尾添加填充字节。这样,每行的第一个像素就位于64字节对齐的地址上。这样做是出于性能原因(在CPU和GPU上)
另一方面,用于nppiFilter等原语的内核数组需要紧密打包。这就是显示的代码不起作用的原因。对于单通道(例如32f_C1
),此方法有效:
hostKernel.pixels(0,0) = -1;
看起来你可以使用nppiSet,它需要一个像素值和一个ROI,但我认为你可以将一个ROI定义为一个像素,从而设置一个像素的值,如果你是这么想的话。例如,参考第7.6.2.154节。当使用类型
32f_C1
时,额外的[0]
索引做什么?换句话说,hostKernel.pixels(0,0)[0]
和hostKernel.pixels(0,0)
之间有什么区别?还有,什么是x
?我不知道x,而是它的值。但是[0]指示您试图更改图像的哪个频道。灰度图像有1个通道,RGB有3个通道。结果是hostKernel.pixels(0,0)[0]。x=-1代码>不编译。编译并正常工作的是:hostKernel.pixels(0,0)=-1
假设,如果我使用多通道图像(例如,32f_C3
),我们将有一个额外的索引来指定如下通道:hostKernel.pixels(0,0)][channelIdx]=-1代码>好的观点。我还尝试将过滤器定义为Npp32s
数组。数组在主机上是1D(NppiSize-kernelSize={3,3};Npp32s-hostKernel[9]={-1,0,1,1,0,1};
)。我使用cudamallocitch
在设备上分配空间,并使用cudaMemcpy2d
将hostKernel
复制到设备上。当我将我的deviceKernel
传递到nppiFilter
时,我得到错误-3
,它对应于NPP\u CUDA\u KERNEL\u EXECUTION\u error
。请注意,调用nppiFilterBox_8u_1R
工作正常,没有错误,并输出视觉上正确的图像。(框
版本有一个预定义的所有过滤器。)