boost :: gil Interleaved_view - PullRequest
       20

boost :: gil Interleaved_view

3 голосов
/ 04 октября 2010

У меня возникли проблемы с выяснением библиотеки улучшенных изображений.

Я не смог найти точную документацию о том, как использовать функцию interleaved_view, включенную в библиотеку boost :: gil. Более конкретно, я не знаю точно, в каком двоичном формате должны храниться необработанные данные.

Единственное упоминание об этом, которое я смог найти, было в уроке gil:

// Calling with 8-bit RGB data into 16-bit BGR
void XGradientRGB8_BGR16(const unsigned char* src_pixels, ptrdiff_t src_row_bytes, int w, int h,
                                 signed short* dst_pixels, ptrdiff_t dst_row_bytes) {
    rgb8c_view_t  src = interleaved_view(w,h,(const rgb8_pixel_t*)src_pixels,src_row_bytes);
    rgb16s_view_t dst = interleaved_view(w,h,(    rgb16s_pixel_t*)dst_pixels,dst_row_bytes);
    x_gradient(src,dst);
}

Также в прототипе функции написано

template<typename Iterator>
type_from_x_iterator< Iterator>::view_t     
boost::gil::interleaved_view (std::size_t width, std::size_t height, Iterator pixels, std::ptrdiff_t rowsize_in_bytes)
//Constructing image views from raw interleaved pixel data. 

У меня вопрос: что именно ожидает формат gil в двоичном формате, и каким должен быть rowize_in_bytes?

Единственный раз, когда я видел чередованное изображение раньше, - это работа с OpenGL, которая представляла собой просто информацию RGB для каждого пикселя, хранящегося рядом друг с другом. Я думал, что rowize_in_bytes будет буквально размером строки пикселей в байтах, поэтому я попытался написать PNG с этим:

void makeImage(const string fileName, const unsigned char * src, const int w, const int h) {
    rgb8c_view_t outImage = interleaved_view(w,h, (const rgb8_pixel_t*) src, w*3*sizeof(unsigned char));
    boost::gil::png_write_view(fileName,outImage);
}

и входной src был плоским массивом размера w * h, формата

(char)R, (char)G, (char)B, (char)R, (char)G, (char)B, (char)R, (char)G, (char)B ...

Изображение было просто белой коробкой на черном фоне. Однако полученные результаты были довольно ... странными

Results

Если у кого-нибудь есть идея, почему это произошло, и как на самом деле работает interleaved_view, это было бы здорово. Заранее спасибо!

РЕДАКТИРОВАТЬ: Извините, ребята, я только что понял свою глупую ошибку. Теперь я все заработал ... :( Проблема была не в формате изображения, а в том, что он был основным, а не основным столбцом

1 Ответ

7 голосов
/ 04 октября 2010

Извините, ребята, я сразу после публикации понял, что слишком долго работаю с Matlab ... Я написал массив в основной форме столбца ... Тьфу, я чувствую себя глупо

...