NVIDIA Performance Primitives
(NPP)是一系列GPU加速的图像、视频以及信号处理函数,与同级别的纯CPU函数相比,这些函数最高可实现5 - 10倍性能提升。利用NPP,开发者能够利用2000多个图像处理与信号处理基元,在数小时之内即可实现应用程序的大幅性能提升。
无论用GPU加速的版本代替CPU版本还是将NPP与现有的GPU加速流水线相结合,NPP都能够实现极高的性能,同时可缩短开发时间。
由于NPP例程中与图像相关的库使用的是freeImage,这里使用OpenCV2.4
中的函数。
就/7_CUDALibraries/boxFilterNPP
的例程来说,有如下几种方法。
使用GpuMat
#include "cuda_runtime.h"
#include <iostream>
#include "opencv2/gpu/gpu.hpp"
#include "opencv2/opencv.hpp"
#include <npp.h>
using namespace std;
using namespace cv;
int main()
{
//读取图片到主机端
Mat hSrc = imread("../zero.jpg",1);
imshow("Input",hSrc);
//将输入图片上传到设备端
gpu::GpuMat dSrc;
dSrc.upload(hSrc);
// 大部分情况下GpuMat::isContinuous() == false , 即hSrc.step一般不等于cols*channels
cout<<"Image on host memory, step = "<<hSrc.step<<" isContinuous? "<<hSrc.isContinuous()<<endl;
cout<<"Image on device memory, step = "<<dSrc.step<<" isContinuous? "<<dSrc.isContinuous()<<endl;
// 设置滤波器参数
// create struct with box-filter mask size
NppiSize oMaskSize = {
5, 5};