Я разрабатываю одно приложение. У меня есть требование, как мое приложение должно обнаружить определенный цвет изображения. Напр. если я хочу обнаружить красный цвет, тогда я должен видеть только красные области изображения. Я попробовал это, следующим образом:Работа с RGB изображения
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. Я должен перебирать цикл в зависимости от высоты и ширины изображения. Например, например, Если высота изображения равна 300, а ширина - 400, тогда приходится перебирать цикл for 300 * 400 = 120000 раз. Что я не думаю, это лучший способ. Так есть ли способ сделать это эффективно? есть ли библиотека с открытым исходным кодом для достижения этой цели?
Я не пробовал это, но вы можете попробовать GPUImage и использовать либо GPUImageRGBFilter для настройки значений RGB образа, или GPUImageLookupFilter карту прочь зеленого и синего. –
Это очень малое количество простой обработки для текущих стандартов, и поскольку вам нужно посетить каждый пиксель, чтобы выполнить фильтрацию, которую вы выполняете, это в значительной степени сложность задачи (линейная). Это означает, что вы можете получить некоторое постоянное улучшение, используя некоторую библиотеку, которая делает вещи немного умнее. Но кроме этого, кроме этого тривиального приложения, с которым вы играете, отличительные цвета в RGB могут привести к плохим результатам. Вместо этого вы должны проверить цветовые пространства, которые выделяют один канал для оттенка, например HSB и другие. – mmgp