ich ein ähnliches Problem aufgetreten, wenn ich auf eine arbeitete Projekt mit OpenCV 2.4.9 auf der Intel Edison-Plattform. Vor jeder Verarbeitung dauerte es ungefähr 80 ms, nur um die Bildaufnahme durchzuführen. Es stellt sich heraus, dass OpenCVs Kameraerfassungslogik für Linux nicht korrekt implementiert ist, zumindest nicht in Version 2.4.9. Da der zugrundeliegende Treiber nur einen Puffer verwendet, ist es nicht möglich, Multi-Threading in der Anwendungsebene zu verwenden, um es zu umgehen - bis Sie versuchen, den nächsten Frame zu greifen, ist der einzige Puffer im V4L2-Treiber gesperrt.
Die Lösung besteht darin, OpenCVs VideoCapture-Klasse nicht zu verwenden. Vielleicht wurde es behoben, um irgendwann eine vernünftige Anzahl von Puffern zu verwenden, aber ab 2.4.9 war es das nicht. In der Tat, wenn Sie Artikel des gleichen Autors als den Link von @Nickil Maveli, Sie finden, dass, sobald er Vorschläge zur Verbesserung der FPS auf einem Raspberry Pi bietet, hört er auf OpenCVs VideoCapture. Ich glaube nicht, dass das ein Zufall ist.
Hier ist mein Beitrag darüber auf dem Intel Edison-Forum: https://communities.intel.com/thread/58544.
Ich habe im Grunde genommen meine eigene Klasse geschrieben, um die Framegrabber zu verarbeiten, direkt mit V4L2. Auf diese Weise können Sie eine ringförmige Liste von Puffern bereitstellen und ermöglichen, dass die Frame-Grabbing- und Anwendungslogik ordnungsgemäß entkoppelt wird. Dies wurde jedoch in C++ für eine C++ - Anwendung getan. Unter der Annahme, dass der oben genannte Link seine Versprechen hält, könnte das ein viel einfacherer Ansatz sein. Ich bin mir nicht sicher, ob es auf BeagleBone funktionieren würde, aber vielleicht gibt es da draußen etwas ähnliches wie PiCamera. Viel Glück.
EDIT: Ich habe mir den Quellcode für 2.4.11 von OpenCV angeschaut. Es sieht so aus, als würden sie jetzt standardmäßig 4 Puffer verwenden, aber Sie müssen V4L2 verwenden, um dies zu nutzen. Wenn Sie sich Ihre Fehlermeldung HIGHGUI ERROR: V4L: Property...
genau anschauen, sehen Sie, dass sie auf V4L und nicht auf V4L2 verweist. Das bedeutet, dass der Build von OpenCV, den Sie verwenden, auf den alten V4L-Treiber zurückgreift. Zusätzlich zu dem singulären Puffer, der Leistungsprobleme verursacht, verwenden Sie einen alten Treiber, der wahrscheinlich viele Einschränkungen und Leistungsprobleme hat.
Ihre beste Wette wäre, OpenCV selbst zu bauen, um sicherzustellen, dass es V4L2 verwendet. Wenn ich mich richtig erinnere, überprüft der OpenCV-Konfigurationsprozess, ob die V4L2-Treiber auf dem Rechner installiert sind und baut sie dementsprechend auf. Sie sollten also sicherstellen, dass V4L2 und alle zugehörigen Dev-Pakete auf dem Rechner installiert sind, auf dem Sie OpenCV bauen.
Für dieses Problem wird nicht es wahrscheinlich helfen, aber wenn man opencv verwenden zu cv Sachen eigentlich tun, wollen Sie wahrscheinlich, dass die opencv überprüfen Sie verwenden gegen die NEON-Erweiterungen kompiliert wird. (google opencv beaglebone neon wird wahrscheinlich nützliche Details finden, zB http://blog.lemoneerlabs.com/3rdParty/Darling_BBB_30fps_DRAFT.html) – Foon
"opencv 2.4" - Sie müssen spezifischer sein, es gab eine Anzahl von 2.4 .x Releases von OpenCV über mehrere Jahre. –