如何在iOS上的图像中找到某种颜色的区域?

时间:2014-04-29 06:43:12

标签: ios objective-c image-processing

我正在做一个图像处理iOS应用程序,我们有一个大图像(例如:大小将是2000x2000)。假设图像是完全黑色的,除了图像的一部分是不同的颜色(假设该区域的大小是200x200)。

SI想要计算不同颜色区域的起点和终点位置。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

这是允许CPU从UIImage获取像素值的简单方法。步骤是

  • 为像素分配缓冲区
  • 使用缓冲区作为后备存储创建位图内存上下文
  • 将图像绘制到上下文中(将像素写入缓冲区)
  • 检查缓冲区中的像素
  • 释放缓冲区和相关资源

- (void)processImage:(UIImage *)input
{
    int width  = input.size.width;
    int height = input.size.height;

    // allocate the pixel buffer
    uint32_t *pixelBuffer = calloc( width * height, sizeof(uint32_t) );

    // create a context with RGBA pixels
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate( pixelBuffer, width, height, 8, width * sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast );

    // invert the y-axis, so that increasing y is down
    CGContextScaleCTM( context, 1.0, -1.0 );
    CGContextTranslateCTM( context, 0, -height );

    // draw the image into the pixel buffer
    UIGraphicsPushContext( context );
    [input drawAtPoint:CGPointZero];
    UIGraphicsPopContext();

    // scan the image
    int x, y;
    uint8_t r, g, b, a;
    uint8_t *pixel = (uint8_t *)pixelBuffer;

    for ( y = 0; y < height; y++ )
        for ( x = 0; x < height; x++ )
        {
            r = pixel[0];
            g = pixel[1];
            b = pixel[2];
            a = pixel[3];

            // do something with the pixel value here

            pixel += 4;
        }

    // release the resources
    CGContextRelease( context );
    CGColorSpaceRelease( colorSpace );
    free( pixelBuffer );
}