Я пытаюсь заменить черный/темно-серый на чисто черное изображение на этом изображении, используя GPUImageChromaKeyBlendFilter, но, похоже, он также заменяет белые:
Вот мой код:
stillImageSource = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"head.jpg"]];
blackImageSource = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"black.jpg"]];
filter = [[GPUImageChromaKeyBlendFilter alloc] init];
[(GPUImageChromaKeyBlendFilter *)filter setColorToReplaceRed:0.27 green:1.0 blue:1.0];
[(GPUImageChromaKeyBlendFilter *)filter setThresholdSensitivity:self.myslider.value];
[stillImageSource addTarget:filter];
[blackImageSource addTarget:filter];
[filter addTarget:self.mygpuimageview];
[stillImageSource processImage];
[blackImageSource processImage];
Как я могу заставить это работать?
Я заметил в этом посте, что Брэд упоминает, что проблема связана с удалением яркости:
https://github.com/BradLarson/GPUImage/issues/2256
«Это связано с вычислением соответствия цветов в фильтре хроматического кеинга. Он пытается удалить компонент яркости и сопоставляет только цветность, поэтому для белого или черного цветов ему трудно сопоставить целевой цвет из-за отсутствия цветности. Вы можете попробовать покопаться в шейдере хроматического кеинга и увидеть, что вы можете улучшить там алгоритм сопоставления цветов ».
Есть ли способ учитывать яркость при кеинге? Я очень новичок в GPUImage и манипулировании изображениями в целом, поэтому я понятия не имею, как даже изменить код для яркости.