LINUX.ORG.RU

Как по хитрому растянуть изображение?


0

1

Есть картинка, размером эдак 500x500

Как бы ее вытянуть хитрым способом от мала до велика, чтобы она стала размером 1000х500 по такому алгоритму:


              100
+-----------------------------+
|                             |
|                             |
|                             | 500
|                             |
|                             |
|                             |
+-----------------------------+
0%   50% 60%     90%         100%  - % предыдущей картинки

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

Как например объекты отбрасывают свою тень - у основания тень отбрасывается четко, к концу удлиняется.

★★★★★

Последнее исправление: Siado (всего исправлений: 1)

Интерполировать картинку сплайнами или еще какой дрянью.
Составить функцию преобразования новых координат (u,v) в старые: (x,y) = F(u,v).
Получить новое изображение.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Да, есть более простой способ: «натянуть» картинку на openGL'ную поверхность нужной формы и получить «снимок» буфера цвета.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

>Составить функцию преобразования новых координат (u,v) в старые: (x,y) = F(u,v).

Дело, однако. Только вот я не совсем понимаю с какими библиотеками тут работать, т.к. с изображениями только через жимп =)

Siado ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

А ведь не плохая идея. Через тот же blender можно попробовать. Только вот примерчик бы )

Siado ★★★★★
() автор топика
Ответ на: комментарий от note173

Дык оно так будет как-то слишком линейно, не равномерно.

Siado ★★★★★
() автор топика
Ответ на: комментарий от Averrin

И самый кривой.

Красивее всего будет использовать хотя бы простенькие сплайны (например, из того же GSL). Проще всего - «встроенные» в openGL сплайны.

Как «натягивать» текстуру на сложную поверхность - примеров полно.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от note173

Зачем кластер? Обработка простенькой картинки ~10Мпикс с использованием CUDA займет от силы секунду-другую...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Для такой задачи CUDA, кластеры, OpenGL.
Можно ещё в булочную ходить с GPS-навигатором, чтобы не заблудиться. Хотя наверняка многие уже ходят.

anonymous
()
Ответ на: комментарий от anonymous

Если картинка большая, то вы замучаетесь ждать, пока вам CPU рассчитает интерполирующие полиномы и преобразует картинку.

Можно, конечно, сделать по-простому - линейной интерполяцией, но при нелинейном преобразовании координат результат будет не очень...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

По сообщению вполне можно было подумать, что у автора уже есть все точки с процентами.
В любом случае, OpenGL тут нужно так же, как и кластеры с GPS. Мне почему-то показалось, что решение нужно для какой-нибудь серверной части.

note173 ★★★★★
()
Ответ на: комментарий от Siado

> с изображениями только через жимп =)

Инструменты - преобразование - масштаб. Там убираешь сохранение пропорций и задаёшь нужный размер. ... PROFIT.

Alan_Steel ★★
()
Ответ на: комментарий от anonymous

О, ну тут в принципе как-то афинные преобразования залепить можно. Но там примеры только с перспективой.

Siado ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

а в gimp куду ещё не собрались впиливать? охреневает ждать. когда он применяет преобразование перспективы.

thunar ★★★★★
()

imagemagick спешит на помощь.

aedeph
()
Ответ на: комментарий от Siado

См. профиль. Но консультант из меня хреновый :)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от pacify

fotoxx не устраивает?

А он что, с CUDA? Что-то я на их сайте такого не нашел. И да, судя по примерам на сайте, панорамы он делает не очень. Хотя, надо «пощупать», чтобы точно понять, что лучше: fotoxx или hugin.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.