Я загружаю файл .png
с использованием OpenCV, и я хочу извлечь его значения синей интенсивности, используя библиотеку тяги.Вызов пользовательских функций в тяге
Мой код выглядит следующим образом:
- Загрузка изображения с помощью OpenCV
IplImage
указатель - Копирование данных изображения в
thrust::device_vector
- Извлечение значения интенсивности синего цвета из вектора устройства внутри структуры с использованием библиотеки тяги ,
Теперь у меня возникла проблема с извлечением значений синей интенсивности из вектора устройства.
- Я сделал этот код в cuda уже сейчас, преобразовывая его с помощью библиотеки тяги.
- Я извлекаю синие значения интенсивности внутри этой функции.
- Я хочу знать, как назвать эту структуру
FetchBlueValues
из основной функции.
Код:
#define ImageWidth 14
#define ImageHeight 10
thrust::device_vector<int> BinaryImage(ImageWidth*ImageHeight);
thrust::device_vector<int> ImageVector(ImageWidth*ImageHeight*3);
struct FetchBlueValues
{
__host__ __device__ void operator()()
{
int index = 0 ;
for(int i=0; i<= ImageHeight*ImageWidth*3 ; i = i+3)
{
BinaryImage[index]= ImageVector[i];
index++;
}
}
};
void main()
{
src = cvLoadImage("../Input/test.png", CV_LOAD_IMAGE_COLOR);
unsigned char *raw_ptr,*out_ptr;
raw_ptr = (unsigned char*) src->imageData;
thrust::device_ptr<unsigned char> dev_ptr = thrust::device_malloc<unsigned char>(ImageHeight*src->widthStep);
thrust::copy(raw_ptr,raw_ptr+(src->widthStep*ImageHeight),dev_ptr);
int index=0;
for(int j=0;j<ImageHeight;j++)
{
for(int i=0;i<ImageWidth;i++)
{
ImageVector[index] = (int) dev_ptr[ (j*src->widthStep) + (i*src->nChannels) + 0 ];
ImageVector[index+1] = (int) dev_ptr[ (j*src->widthStep) + (i*src->nChannels) + 1 ];
ImageVector[index+2] = (int) dev_ptr[ (j*src->widthStep) + (i*src->nChannels) + 2 ];
index +=3 ;
}
}
}
С кодом возникает ряд проблем. Прочитали ли вы [ускоренный быстрый старт] (https://github.com/thrust/thrust/wiki/Quick-Start-Guide) (как я ранее вам предлагал?) Есть примеры (например, саксофонный функтор), приведенный в там (и во многих других местах) использования определяемого пользователем функтора в коде тяги. [Вот пример] (http://stackoverflow.com/questions/15989178/cuda-thrust-reduce-by-key-on-only-some-values-in-an-array-based-off-values-in/15995193 # 15995193) Я написал, что может быть так, как вы пытаетесь сделать. Тем не менее, ваш функтор, вероятно, не нуждается в цикле в нем. –
Вы также можете рассмотреть возможность исключения функтора и извлечения данных и просто использовать механизм доступа с широким диапазоном (https://github.com/thrust/thrust/blob/master /examples/strided_range.cu). –
Я благодарю вас .. Я пробовал механизм доступа с широким диапазоном в моем коде, и он работает ... Но работает ли он внутри устройства? – user1891682