Как просто выстрел в темноте, непроверенное предложение от кого-то, кто совсем недавно занимается обработкой изображений ... может быть, вы могли бы просто масштабировать каналы?
Например:
RGB_Pixel.r = RGB_Pixel.r * 0.75;
RGB_Pixel.g = RGB_Pixel.g * 0.75;
RGB_Pixel.b = RGB_Pixel.b * 1.25;
Если вы перебираете свое изображение попиксельно с этими тремя изменениями, я ожидаю, что вы увидите смещение изображения в сторону синего, и цифры, конечно, могут быть методом проб и ошибок.
EDIT:
Теперь, если вы хотите ТОЛЬКО изменить цвет пикселов определенного цвета для начала, скажем, вы хотите превратить синий автомобиль в красный, ничего не делая для остальной части изображения, вам нужно будет проверить каждый из них. пиксель, чтобы увидеть, какой цвет это выглядит. Один из способов сделать это - использовать евклидово расстояние:
int* R = RGB_Pixel.r;
int* G = RGB_Pixel.g;
int* B = RGB_Pixel.b;
// You are looking for Blue, which is [0 0 255];
// this variable D is the distance of your current pixel from the desired color.
float D = sqrt( (R-0)*(R-0) + (G-0)*(G-0) + (B-255)*(B-255) );
if(D < threshold)
{
R = R * 0.75;
G = G * 0.75;
B = B * 1.25;
}
Пороговая переменная - это число от 1 до 255, представляющее максимальное расстояние, на которое цвет может быть от цвета, который вы ищете, и все же считающееся «достаточно близким». Это потому, что вы не хотите искать только [0 0 255], очень редко вы найдете идеальный синий (или что-нибудь еще) на изображении.
Вы хотите использовать минимальное пороговое значение, которое вы можете избежать, чтобы не красить другие вещи, которые не являются частью искомого объекта, но вы хотите убедиться, что ваш порог высокий Достаточно того, что оно охватывает все ваше изображение. Один из способов сделать это - установить несколько D-переменных, каждая из которых имеет свой целевой цвет, чтобы вы могли фиксировать несколько отдельных типов «синего» без использования действительно высокого порога. Например, для человеческого глаза [102 102 200] выглядит как синий, но может потребоваться довольно высокий порог, чтобы поймать, если [0 0 255] - ваш целевой цвет.
Я предлагаю поиграть с этим калькулятором, чтобы понять, какие цвета вы хотите найти именно.