Параметры функции: входного изображения, первый цвет, второй цветСравнение пикселей изображения в цвета RGB
Я принимаю изображение, глядя на высоту и ширину этого тогда итерация через найти пиксель. Если цвет пикселя ближе всего к первому цвету (color1
), измените этот цвет на color1
, если цвет пикселя ближе всего к color2
, затем измените его на color2
. Считается, что моя проблема связана с кодом abs(color2-color1)/2
при попытке сравнить два цвета параметров.
void Preprocessor(BMP pix, RGB color1, RGB color2) {
int height = pix.GetHeight();
int width = pix.GetWidth();
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (pix[i][j]->red + pix[i][j]->green + pix[i][j]->blue >
abs(color2 - color1)/2) { // pixel color closest to color1
pix[i][j] = color1;
pix[i][j] = color1;
pix[i][j] = color1;
} else { // pixel color closest to color2
pix[i][j] = color2;
pix[i][j] = color2;
pix[i][j] = color2;
}
}
}
}
Есть ли реализация 'оператора - (RGB, RGB) 'и' operator/(RGB, int) '? –
Операции 'pix [i] [j] = color1' и' pix [i] [j] = color2' должны выполняться только один раз, но это в основном безвредно. –
Я не думаю, что вы можете выровнять цвета так, как вы делаете на abs(). Вы также сравниваете цвет с разницей в цвете. Я бы порекомендовал посмотреть на этот ответ: http://stackoverflow.com/a/9018153/1928529 В приведенном сравнении вы можете получить расстояние pix [i] [j] <-> color1 en pix [i] [j] <-> color2 , а затем просто проверьте, какой цвет близок к пикселю. – dennisschagt