2016-11-22 1 views
0

Im Arbeiten am Projekt mit opencv und C++. Version von Opencv ist 3.1. HW-Setup ist Nvidia GT460 und Intel i7 3820, 64 GB RAM. Ich versuche, mehrere Kamera-Setup zu erreichen, wo alle Kamera-Feeds in einem großen Mosaik zusammengeführt werden. In frühen Stadien vielleicht 4x4 später noch größer. Danach werde ich dieses Mosaik analysieren und mehrere Objekte verfolgen.Erstellen von Mosaik von Kamera-Feeds in opencv ohne erhebliche Verzögerung

Das Problem ist, dass, wenn ich Kamera-Feed mit Capture-Befehl in Opencv erstellen und speichern Sie es dann in Matrix, analysieren Sie es und zeigen Sie es. Es gibt bereits ein großes FPS-Problem mit zwei Kamera-Feeds. Ich habe drei USB-Feeds sowie mehrere UDP- oder RTSP-Streams getestet. Bei der Verwendung von USB ist die Verzögerung nicht das größte Problem, aber FPS sind so etwas wie eine Trennung zwischen den Feeds. Und die Verwendung der Stream-Methode gibt mir einen niedrigen FPS und eine hohe Verzögerung (etwa 15 Sekunden). Ich habe auch festgestellt, dass es zwischen den Kamerafahrten unterschiedliche Verzögerungen gibt, selbst wenn ich Kameras auf dasselbe gerichtet habe.

Gibt es jemanden, der mir helfen oder ein ähnliches Problem lösen könnte? Ist es ein Problem von Opencv, dass es nicht mehr Live-Feeds gleichzeitig analysieren kann?

Heres mein Verschmelzen Code:

merged_frame = Mat(Size(1280, 960), CV_8UC3); 

    roi = Mat(merged_frame, Rect(0, 0, 640, 480)); 
    cameraFeed.copyTo(roi); 
    roi = Mat(merged_frame, Rect(640, 0, 640, 480)); 
    cameraFeed2.copyTo(roi); 
    roi = Mat(merged_frame, Rect(0, 480, 640, 480)); 
    cameraFeed3.copyTo(roi); 
    roi = Mat(merged_frame, Rect(640, 480, 640, 480)); 
    cameraFeed4.copyTo(roi); 
+0

Erneutes Erstellen von "merged_frame" in jeder Schleife? Der Ansatz ist grundsätzlich korrekt, nur unnötige Kopien oder Matte Kreationen vermeiden – Miki

+0

Ich würde einen Thread für jede Kamera erfassen Aufgabe festlegen. Wenn die Erfassung abgeschlossen ist, senden Sie eine Nachricht an den Haupt-Thread, um den großen Frame zu aktualisieren. – Ripi2

+0

Danke für deine Antworten, ich habe bereits das Erstellen von merged_frame out of loop verschoben und es hat die Performance ein wenig verbessert und jetzt werde ich versuchen, mehr Threads zu erstellen, nur um zu sehen, ob es noch besser wird. –

Antwort

1

Es gibt zwei Funktionen hconcat und vconcat, die nicht in der Dokumentation sind.

Sie können ein Beispiel ihrer Verwendung sehen (das ist ziemlich einfach, wenn alle Ihre Kamera-Feeds Bilder mit der gleichen Auflösung liefern) here.

Dies wird Sie wahrscheinlich fragen, temporäre Mat-Objekte zu erstellen, um Zwischenergebnisse zu speichern, aber ich denke, es ist eine intuitivere Möglichkeit, ein Mosaik von Frames zu erstellen.