Линейный градиент с функциями IPP

Я хотел бы создать линейный градиент с использованием функций IPP (Integrated Performance Primitives) и избежать попиксельной манипуляции с цветом.

Другими словами, я не могу найти подходящую функцию или комбинацию функций, которые позволили бы мне создать RGB-изображение с градиентом от R0 до R1, от G0 до G1, от B0 до B1 (начальное и конечное значения RGB). Я могу создать его вручную, циклически повторяя каждый пиксель и устанавливая цвет, но я надеюсь, что есть более элегантный (и быстрый) способ сделать это.


person Ross    schedule 02.09.2010    source источник


Ответы (2)


Насколько я понимаю, ippiImageRamp может создавать только градиенты серого цвета, верно?

В качестве альтернативы вы можете использовать ippiResizeSqrPixel для изменения размера изображения 2x2 пикселя до полного размера с интерполяцией IPPI_INTER_LINEAR:

RGB0   |   RGB1
---------------                 =>         [Full Sized Image]
RGB0   |   RGB1

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

person Niki    schedule 04.09.2010
comment
Хорошая идея о ResizeSqrPixel, но не уверен в производительности. На самом деле я использую ippiRotate для перемещения и поворота, но ippiWarpAffine тоже может выполнять эту работу. ippiImageRamp работает с RGB, но не независимо. Моему текущему алгоритму на самом деле для инициализации требуется только линейное изменение значений серого. - person Ross; 04.09.2010

Я нашел какое-то решение. С помощью функции ippiImageRamp.

Эта функция создает одно- или трехканальное изображение, которое можно использовать в качестве тестового изображения для изучения эффекта применения различных функций обработки изображения.

Значения пикселей целевого изображения вычисляются по одной из следующих формул:

dst(x,y) = смещение + наклон * x, если ось = ippAxsHorizontal,

dst(x,y) = смещение + наклон * y, если ось = ippAxsVertical,

dst(x,y) = смещение + наклон * x * y, если ось = ippAxsBoth

person Ross    schedule 04.09.2010