2012-11-02 13 views
12

Moja aplikacja używa cv :: findContours na obrazie binarnym opencv. Teraz muszę zrobić to w czasie rzeczywistym. GPUImage ma filtr Cannyedge, ale nie mogłem znaleźć niczego związanego z findContours. Czy GPUImage ma coś, co bardzo przypomina metodę findContours? Jeśli nie, czy ktoś może zaproponować alternatywę? DziękiGPUImage odpowiednik cv :: findContours

+5

Nie ma tam nic, co robi to teraz. Trudnym problemem jest praca z procesorami graficznymi. Ostatnio czytałem w artykule Seana O'Connella o technice do tego: ftp://ftp.heanet.ie/mirrors/sourceforge/g/gc/gccl/paper_draft.pdf, ale nawet tam on nie widzi ogromnego przyspieszenia w określaniu połączonych obiektów na GPU. W połowie drogi możesz najpierw uruchomić wykrywanie krawędzi na GPU, a następnie odczytać wyniki z przetwarzania procesora. Przynajmniej trochę przyspieszysz. –

+0

Myślę, że pójdę tą drogą. Jaki jest najlepszy/skuteczny sposób konwersji surowych buforów po uruchomieniu filtra w cv :: Mat? Próbowałem konwertować go do -> UIImage -> cv :: Mat, ale to trwa zbyt długo. – 0xSina

+2

Wypróbuj GPUImageRawDataInput, gdzie powinieneś być w stanie podawać surowe dane RGBA (lub BGRA, nie pamiętam kolejności bajtów) bez konieczności przechodzenia przez Core Graphics dla UIImage. –

Odpowiedz

0

Wystąpił problem zgłoszone w tym zakresie w 2015 r https://github.com/BradLarson/GPUImage/issues/2094

Odpowiedź tej sprawie stwierdza, że ​​GPUImage nie oferuje takiej alternatywy w tej chwili. Najlepszym rozwiązaniem może być dostarczenie wyjścia z wykrywania Canny lub Sobela GPUImage do operacji określania konturu poza strukturą GPUImage.