处理图像的RGB

时间:2013-02-10 05:36:06

标签: iphone ios objective-c image-processing

我正在开发一个应用程序。我的要求就像我的应用程序应该检测图像的特定颜色。对于例如如果我想检测红色,那么我应该只看到图像的红色区域。我通过以下方式尝试了这个:

psudocode:

首先,我使用以下方式获取RGB形式的图像的每个像素的信息:

    for(int i=0; i < width; ++i)
{
    for (int j=0; j <height; j++)
    {
         byteIndex = (bytesPerRow * j) + i * bytesPerPixel;

        CGFloat red   = (rawData[byteIndex]     * 1.0) /255.0;
        CGFloat green = (rawData[byteIndex + 1] * 1.0)/255.0 ;
        CGFloat blue  = (rawData[byteIndex + 2] * 1.0)/255.0 ;
        if (red>0.9 && red<1)
        {
            rgba[byteIndex]   =red*255;
            rgba[byteIndex+1] =green*0 ;
            rgba[byteIndex+2] = blue*0;
            count++;

        }

    }

}

然后我将此信息分配给另一个图像,其中包含零蓝色和绿色部分,因此我只能看到图像的红色区域。它工作正常。

但问题在于for循环。我必须迭代for循环取决于图像的高度和宽度。例如。如果图像的高度为300且宽度为400则必须迭代for循环300 * 400 = 120000次我认为这不是更好的方法。那么有没有办法有效地做到这一点?是否有任何开源库来实现这一目标?

1 个答案:

答案 0 :(得分:0)

您可以开始优化代码。那里有很多不必要的操作和浮点/整数转换。

for ( NSUInteger i = 0; i < width * height ; i ++ ) {
    NSUInteger red = rawData[i] ;
    if ( red > 230 ) {
        rawData[i+1] = 0 ;
        rawData[i+2] = 0 ;
    }
}