Warum ist mein Code viel langsamer als opencv für einen einfachen StereoBM-Algorithmus?

8

Dies ist mein Testcode für die Implementierung eines einfachen testBM-Algorithmus, keine Vorfilterung. Aber es dauert etwa 400 ms oder mehr, wenn die Fenstergröße größer ist, während die StereoBM von opencv (CPU nicht GPU) 20 ms dauert. Ich habe die Quelle von StereoBM überprüft, aber es ist schwierig für mich, es zu verstehen. Gibt es jemanden, der weiß warum?

Und unten ist mein Code.

%Vor%

Hier ist der wesentliche Quellcode von StereoBM in opencv. Ich bin ein wenig verwirrt nach der Initialisierung. Könnte jemand kurz erklären?

%Vor%

    
Seven 26.04.2015, 14:16
quelle

1 Antwort

3

OpenCV führt viele Algorithmen parallel aus; parallel_for / do abstrahiere die TBB-, PPL- und OpenMP-Backends.

Das Originalbild ist in Teilbereiche unterteilt und findStereoCorrespondenceBM() wird für jeden dieser Teilbereiche ausgeführt. Das ist mit der angezeigten Schnittstelle möglich, da cv::Mat als Sicht auf ein Teilbild verwendet werden kann, ohne dass die tatsächlichen Pixeldaten kopiert werden müssen. Sie können dies überprüfen, indem Sie sich die verwendeten Prozessoren (z. B. mit Process Explorer unter Windows oder oben unter Unix) während der Programmausführung ansehen.

(Ursprünglich von Hauke ​​Heibel als Kommentar gepostet)

    
Tim B 17.10.2015, 09:25
quelle

Tags und Links