Seam Carving - 访问可可中的像素数据

时间:2011-05-24 18:30:35

标签: objective-c cocoa image-processing core-image

我想通过Avidan / Shamir实现接缝雕刻算法。在能够使用核心图像滤波器实现的能量计算阶段之后,我需要计算具有最低能量的接缝,这些接缝无法实现为核心图像过滤器,因为它使用动态编程(并且您无法访问以前的opengl着色语言计算。)

所以我需要一种方法来在objective-c cocoa中有效地访问图像的像素数据。

伪代码省略边界检查:

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 个答案:

答案 0 :(得分:3)

访问图像像素值的最佳方法是使用CGBitmapContextCreate创建CGBitmapContextRef。关于这一点的重要部分是,当您创建上下文时,您可以传入指针,该指针将用作位图数据的后备存储。这意味着数据将保存像素值,您可以随心所欲地使用它们。

所以步骤应该是:

  1. 使用malloc或其他合适的分配器分配缓冲区。
  2. 将该缓冲区作为第一个参数传递给CGBitmapContextCreate。
  3. 将图像绘制到返回的CGBitmapContextRef。
  4. 发布背景信息。
  5. 现在您的原始数据指针填充了CGBitmapContextCreate调用中指定格式的像素。