2013-02-11 5 views
4

Является ли библиотека NPP для CUDA build использовать freeImage или я могу использовать другое строковое или просто неподписанное char * изображение в качестве входных данных в функции АЭС.NPP CUDA без freeImage

Причина, по которой я делаю этот вопрос, состоит в том, что все образцы для АЭС имеют большие обертки для freeImage.

Я подробно рассмотрел NVIDIA Performance Primitives (NPP), но здесь упоминается только изображение, а не конкретный формат изображения.

Если у вас есть пример использования АЭС без freeImage или просто без загрузки изображения с диска, то я бы с осторожностью был доволен.

ответ

5

АЭС не зависит от FreeImage и не соответствует каким-либо конкретным соглашениям с библиотекой обработки изображений. Он просто следует общему соглашению, используемому в доменах обработки изображений. Он ожидает, что изображения будут храниться в строчном порядке. Изображения обычно хранятся в виде линейной линейной памяти. Поэтому функции АЭС принимают указатель на данные необработанного изображения, хранящиеся на устройстве, размер изображения и step изображения в качестве аргументов.

В образцах АЭС FreeImage используется как библиотека ввода-вывода изображений и упрощает обработку изображений на стороне хоста.

Я разрабатываю функции обработки изображений с использованием АЭС. Чтобы проверить функции, я использую OpenCV для чтения изображения с диска, скопируйте данные с IplImage в указатель необработанного устройства и передайте указатель на функцию АЭС.

Вот пример использования АЭС с OpenCV в качестве хоста.

#include <iostream> 
#include <cuda_runtime.h> 
#include <npp.h> 
#include <opencv2/opencv.hpp> 

using namespace std; 

int main() 
{  
    const int width = 640, height = 480; 

    //Create an 8 bit single channel image 
    IplImage* img = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1); 
    //Set All Image Pixels To 0 
    cvZero(img); 

    cvShowImage("Input",img); 
    cvWaitKey(); 


    const int step = img->widthStep; 
    const int bytes = img->widthStep * img->height; 

    unsigned char *dSrc, *dDst; 
    cudaMalloc<unsigned char>(&dSrc,bytes); 
    cudaMalloc<unsigned char>(&dDst,bytes); 

    //Copy Data From IplImage to Device Pointer 
    cudaMemcpy(dSrc,img->imageData,bytes,cudaMemcpyHostToDevice); 

    NppiSize size; 
    size.width = width; 
    size.height = height; 

    const Npp8u value = 150; 

    //Call NPP function to add a constant value to each pixel of the image 
    nppiAddC_8u_C1RSfs(dSrc,step,value,dDst,step,size,1); 

    //Copy back the result from device to IplImage 
    cudaMemcpy(img->imageData,dDst,bytes,cudaMemcpyDeviceToHost); 

    cudaFree(dSrc); 
    cudaFree(dDst); 

    cvShowImage("Output",img); 
    cvWaitKey(); 

    cvReleaseImage(&img); 

    return 0; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^