我正在开发一个应用程序。我的要求就像我的应用程序应该检测图像的特定颜色。对于例如如果我想检测红色,那么我应该只看到图像的红色区域。我通过以下方式尝试了这个:
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次我认为这不是更好的方法。那么有没有办法有效地做到这一点?是否有任何开源库来实现这一目标?
答案 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 ;
}
}