Вопрос

Я изначально подошел к этому вопросу с учетом CoreImage (потому что мне еще нужно сделать распознавание лиц), но понял, что, к сожалению, фильтры CI Distortion еще не включены в iPhone.

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

Учитывая количество приложений, которые искажают изображение, я знаю, что это не может быть невероятно сложно.

Я не знаю C или C++, и у меня нет времени изучать эти языки без крайней необходимости.Это станет необходимым, если одна из этих библиотек станет идеальной библиотекой для решения этой задачи.

Есть ли у кого-нибудь опыт работы с какой-либо из этих библиотек?

Есть ли какие-нибудь книги, посвященные этому конкретно для iOS5?

Ресурсы, которые я нашел:

Это было полезно?

Решение

Как вы говорите, текущие возможности Core Image немного ограничены в iOS.В частности, разочаровывает отсутствие собственных ядер, которые можно найти на настольных компьютерах.Все другие альтернативы, которые вы перечисляете (за исключением GLImageProcessing, который не сможет выполнять такую ​​​​фильтрацию), представляют собой библиотеки с привязкой к процессору и будут слишком медленными для выполнения живой фильтрации на мобильном устройстве.

Однако я могу указать вам на фреймворк с открытым исходным кодом под названием Графическое изображение который я выпустил только потому, что не смог найти что-то, что позволяло бы создавать собственные эффекты.Как следует из названия, GPUImage выполняет обработку неподвижных изображений и видео с ускорением графического процессора с использованием шейдеров OpenGL ES 2.0.Используя их, вы можете писать свои собственные эффекты, так что вы сможете делать практически все, что только придет в голову.Сам фреймворк представляет собой Objective-C и имеет довольно простой интерфейс.

В качестве примера фильтра искажений можно привести следующий шейдер (на основе кода в Ответ Дэнни Пфлугофта) создает своего рода эффект рыбьего глаза:

varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;

const mediump float bulgeFactor = 0.5;

void main()
{
    mediump vec2 processedTextureCoordinate = textureCoordinate - vec2(0.5);
    mediump float radius = processedTextureCoordinate.x * processedTextureCoordinate.x + processedTextureCoordinate.y * processedTextureCoordinate.y;
    mediump vec2 distortedCoordinate = vec2(pow(radius, bulgeFactor)) * processedTextureCoordinate + vec2(0.5);

    gl_FragColor = texture2D(inputImageTexture, distortedCoordinate);
}

Это производит такой эффект на видеопоток:

Fisheye effect filter

В моих тестах GPUImage обрабатывает изображения в 4 раза быстрее, чем Core Image на iPhone 4 (в 6 раз быстрее, чем обработка, связанная с процессором), а видео — в 25 раз быстрее, чем Core Image (в 70 раз быстрее, чем на процессоре).Даже в худшем случае, который я мог бы использовать, он соответствует Core Image по скорости обработки.

Фреймворк все еще довольно новый, поэтому количество стандартных фильтров, которые у меня сейчас есть, невелико, но в ближайшее время я добавлю еще несколько.Тем временем вы можете написать свои собственные шейдеры искажений для обработки изображений, а исходный код всего этого доступен для настройки по мере необходимости. Мой вступительный пост об этом есть немного больше подробностей о том, как использовать это в ваших приложениях.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top