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%
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)