我正在开发一个应用程序。我有要求,比如我的应用程序应该检测图像的特定颜色。例如,如果我想检测红色,那么我应该只看到图像的红色区域。我已经通过以下方式尝试过:
伪代码:
首先,我使用以下方法以 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 次,我认为这不是更好的方法。那么有什么方法可以有效地做到这一点?是否有任何开源库来实现这一点?