Вырезание шва - Доступ к пиксельным данным в какао - PullRequest
2 голосов
/ 24 мая 2011

Я хочу реализовать алгоритм вырезания шва от Avidan / Shamir. После этапа вычисления энергии, который может быть реализован с использованием основного фильтра изображений, мне нужно вычислить швы с наименьшей энергией, которые не могут быть реализованы в качестве основного фильтра изображений, поскольку он использует динамическое программирование (и у вас нет доступа к предыдущие вычисления на языке затенения opengl).

Так что мне нужен способ эффективного доступа к пиксельным данным изображения в объективе c какао.

Псевдокод пропускает проверку границ:

for y in 0..lines(image) do:
  for x in 0..columns(image) do:
    output[x][y] = value(image, x, y) + 
                     min{ output[x-1][y-1]; output[x][y-1]; output[x+1][y-1] }

1 Ответ

3 голосов
/ 24 мая 2011

Лучший способ получить доступ к значениям пикселей для изображения - это создать CGBitmapContextRef с CGBitmapContextCreate . Важной частью этого является то, что при создании контекста вы передаете указатель, который будет использоваться в качестве резервного хранилища для данных растрового изображения. Это означает, что данные будут содержать значения пикселей, и вы можете делать с ними все, что захотите.

Так что шаги должны быть:

  1. Выделите буфер с помощью malloc или другого подходящего распределителя.
  2. Передать этот буфер в качестве первого параметра в CGBitmapContextCreate.
  3. Нарисуйте ваше изображение в возвращенном CGBitmapContextRef.
  4. Освободить контекст.
  5. Теперь у вас есть исходный указатель данных, заполненный пикселями в формате, указанном при вызове CGBitmapContextCreate.
...