1

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

伪代码:

首先,我使用以下方法以 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 次,我认为这不是更好的方法。那么有什么方法可以有效地做到这一点?是否有任何开源库来实现这一点?

4

1 回答 1

0

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

for ( NSUInteger i = 0; i < width * height ; i ++ ) {
    NSUInteger red = rawData[i] ;
    if ( red > 230 ) {
        rawData[i+1] = 0 ;
        rawData[i+2] = 0 ;
    }
}
于 2013-02-10T10:26:24.263 回答