Wideo Chroma-Filtering za pomocą GPUImage?
Próbuję wyświetlić plik wideo z przezroczystością wewnątrz mojej aplikacji za pomocą klucza przezroczystości (RGB: 0x00FF00
, lub pełny zielony) za pomocą awesome @ BradLarsonGPUImage zestaw narzędzi. Mam jednak pewne trudności zGPUImageChromaKeyFilter
filtrować i nie do końca rozumiem dlaczego.
Mój źródłowy plik wideo jest dostępny w mojej skrzynce odbiorczejtutaj (12 KB, 3 sekundy, pełne zielone tło, tylko kwadrat na ekranie),
I użyłem przykładowego projektu zatytułowanegoSimpleVideoFilter
.
To jest kod, którego próbowałem użyć (po prostu go zastąpiłem-viewDidLoad
):
NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"];
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];
filter = [[GPUImageChromaKeyFilter alloc] init];
[filter setColorToReplaceRed:0 green:1 blue:0];
[filter setEnabled:YES];
[movieFile addTarget:filter];
GPUImageView *filterView = (GPUImageView *)self.view;
[filter addTarget:filterView];
[movieFile startProcessing];
Zgodnie z dokumentacją (która jest rzadka), topowinien efekt zastąpienia całej zieleni w filmie. Zamiast tego otrzymuję to jako wyjście:
Co mówi mi, że wideo jest odtwarzane (a więc kopiuje się do aplikacji), ale wydaje się, że nie wykonuje żadnego kluczowania chrominancji. Dlaczego miałoby to być? Czy muszę ręcznie ustawić wartości i progi wygładzania? Nie powinienem, ponieważ źródło zawiera tylko dwa kolory (0x00FF00
i0x000000
).
Przetestowałem to również na urządzeniu, ale bezskutecznie. Prawie wszystkie inne filtry, które próbuję użyć, takie jakGPUImageRGBFilter
, GPUImageSepiaFilter
, itp. MożeGPUImageChromaKeyFilter
po prostu zostać złamanym?
Każda pomoc w tym zakresie byłaby doceniana, ponieważ w tym momencie ocieram spód beczki o przezroczystość wideo.