2 Stimmen

Wrapping von C++ OpenCV-Code für Python

Ich habe eine Demo-Anwendung, die in Python geschrieben ist. Sie verwendet eine Menge bestehenden C++-Code (von mir geschrieben), der auf OpenCV für die Bildverarbeitung basiert. Derzeit erfolgt die Kommunikation zwischen Python und C++ über Datei-E/A und Unterprozessaufrufe, was nicht sehr effizient ist. Wie lässt sich der C++-Code am besten verpacken, so dass er von Python aus aufgerufen werden kann?

Es gibt zu viel C++-Code, als dass man darüber nachdenken könnte, ihn nach Python zu portieren, also ist das nicht wirklich eine Option.

Vor langer Zeit wurden die Python OpenCV Wrapper in SWIG geschrieben, aber es sieht so aus, als ob die neueste Version der Wrapper völlig anders ist. Kann jemand mich in die richtige Richtung zeigen?

1voto

MariusSiuram Punkte 2978

Ohne die Komplexität des Codes, die Vielfalt des C++-Codes und dessen Stil zu kennen... Ich würde empfehlen " Erweitern von Python "

Es ist keine sofortige Lösung (Sie sollten den C++-Code ändern, einige neue Funktionen prototypisieren oder eine einfache Wrapper-Schicht in C hinzufügen). Aber, wenn Sie planen, ein komplexes Projekt zu tun (und sind auch ein bisschen besorgt über die Leistung) ... es scheint der beste Weg, es zu tun.

Die Portierung von C++-Code auf Python scheint ein Rückschritt zu sein. Neuen Code in Python zu schreiben ist in Ordnung (ich bin ein Fan davon), aber C++ ist (oft) effizienter.

Edit: Werfen Sie auch einen Blick auf ctypes Modul. Vielleicht passt es ja zu Ihren Bedürfnissen. Wenn Sie mit dem Wrapping in Python besser zurechtkommen, dann ist es vielleicht besser. Wenn es Ihnen nichts ausmacht, mit dem C-Code zu spielen, dann erweitern Sie Python, indem Sie ein Modul mit Ihrem bestehenden Code machen.

1voto

user1448446 Punkte 66

Es gibt zwei Möglichkeiten, wie Sie Ihr Python-Programm direkt mit Ihrem C/C++-Programm interagieren lassen können:

  1. Verpacken Sie Ihren C/C++-Code in eine DLL mit ausschließlich C-API. Verwenden Sie dann ctypes um C-Funktionen innerhalb der DLL aufzurufen. Der Vorteil dieser Methode ist, dass Sie keine andere Bibliothek einbinden/verknüpfen müssen.

  2. Erweitern Sie Python durch Hinzufügen eines neuen Python-Moduls. Sie können verwenden python verstärken um auf einfache Weise ein Python-Modul zu erstellen. Der Vorteil dieser Methode ist, dass Sie Ihren Code nicht in eine C-API einwickeln müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X