Как использовать функции CImg с данными пикселей? - PullRequest
2 голосов
/ 08 апреля 2019

Я использую Visual Studio и ищу полезную библиотеку обработки изображений, которая позаботится об основных функциях обработки изображений, таких как вращение, чтобы мне не приходилось постоянно кодировать их вручную. Я сталкивался с CImg, и он поддерживает это, а также многие другие полезные функции, а также интерполяцию.

Однако, все примеры, которые я видел, показывают, что CImg используется для загрузки и использования полных изображений. Я хочу работать с данными пикселей. Так что мои петли типичны:

for (x=0;x<width; x++)
for (y=0;y<height; y++)

Я хочу выполнить билинейное или бикубическое вращение в этом случае, и я вижу, что CImg поддерживает это. Он предоставляет функции rotate () и get_rotate, среди прочих.

Я не могу найти в Интернете примеров, показывающих, как использовать это с пиксельными данными. В идеале я мог бы просто передать ему цвет пикселя, x, y и метод интерполяции, и он вернул результат.

Может ли кто-нибудь дать какие-нибудь полезные предложения? Если CImg не подходит для этого типа библиотеки, может кто-нибудь порекомендовать простой, легкий и простой в использовании?

Спасибо!

1 Ответ

1 голос
/ 08 апреля 2019

Вы можете скопировать данные пикселей в CImg класс, используя итераторы, и скопировать их обратно, когда закончите.

std::vector<uint8_t> pixels_src, pixels_dst;
size_t width, height, n_colors;

// Copy from pixel data
cimg_library::CImg<uint8_t> image(width, height, 1, n_colors);
std::copy(pixels_src.begin(), pixels_src.end(), image.begin());

// Do image processing

// Copy to pixel data
pixels_dst.resize(width * height * n_colors);
std::copy(image.begin(), image.end(), pixels_dst.begin());
...