Meine App verwendet opencvs cv :: findContours in einem binären Bild. Ich muss es jetzt in Echtzeit machen. GPUImage hat einen cannyedge-Filter, aber ich konnte nichts finden, was mit findContours zu tun hat. Hat GPUImage etwas, das findContours sehr ähnlich ist? Wenn nicht, kann jemand eine Alternative vorschlagen? DankGPUImage entspricht cv :: findContours
12
A
Antwort
0
Es gab ein Problem in dieser Hinsicht berichtet in 2015. https://github.com/BradLarson/GPUImage/issues/2094
Die Antwort dieser Frage erklärt, dass GPUImage keine solche Alternative zur Zeit bietet. Die beste Schätzung könnte also sein, die Ausgabe aus der Canny- oder Sobel-Kantenerkennung von GPUImage in eine Konturbestimmungsoperation außerhalb des GPUImage-Frameworks einzubringen.
Da ist nichts drin, das das jetzt tut. Es ist ein kniffliges Problem, an Grafikprozessoren zu arbeiten. Ich habe kürzlich Sean O'Connells Paper über eine Technik dafür gelesen: ftp://ftp.heanet.ie/mirrors/sourceforge/g/gc/gccl/paper_draft.pdf, aber selbst dort sieht er keine große Beschleunigung beim Bestimmen von verbundenen Objekten auf der GPU. Als Mittelmaß können Sie Ihre Kantenerkennung zuerst auf der GPU ausführen und dann die Ergebnisse für die CPU-gebundene Verarbeitung auslesen. Du würdest dadurch wenigstens ein bisschen schneller werden. –
Ich denke, ich werde diesen Weg gehen. Was ist der beste Weg um die Rohpuffer nach dem Ausführen eines Filters in cv :: Mat umzuwandeln? Ich habe versucht, es zu konvertieren -> UIImage -> cv :: Mat, aber das dauert zu lange. – 0xSina
Probieren Sie einen GPUImageRawDataInput, wo Sie in der Lage sein sollten, in rohe RGBA (oder BGRA, ich vergesse die Byte-Reihenfolge) Daten ohne Kern Grafiken für eine UIImage übergeben. –