WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matlab Mex output von openCV

 

Karl2k

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2018, 13:30     Titel: Matlab Mex output von openCV
  Antworten mit Zitat      
Moin,

ich benutze seit Kurzem Software für einen PMD Sensor. Das Framework ist in C++ geschrieben und ich möchte die Daten per MEX in Matlab nutzen können.

Dazu habe ich eine Mex-Funktion geschrieben, um hardwarenah die Sensordaten abgreifen zu können. Ich bin nun so weit, dass ich die Messdaten pro Frame als cv::Mat (openCV Typ) bekomme. Leider hänge ich nun an dem Punkt, diese in ein mxArray zu wandeln und dann per mexFunction zurückgeben zu können.

Den Tag über habe ich nichts nutzbares im Netz gefunden... die verständlichste Lösung sah so aus: https://stackoverflow.com/questions.....-without-copying-the-data

Leider bekomme ich nur eine Matrix mit vielen Nullen und wenigen (winzig kleinen) Werte als Antwort in Matlab.
Sieht nach nem typischen Daten-Kopie-Fehler in C++ aus, ich weiß nur nicht wie ich die Daten aus dem C-Code handhabbar exportiere.

Etwas Code:
Code:

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
cv::Mat AmpImg = getXYZData("192.168.1.1", 80);
plhs[0] = mxCreateDoubleMatrix(AmpImg.rows, AmpImg.cols, mxREAL);

double *pOut = mxGetPr(plhs[0]);
      AmpImg = AmpImg.t();
      cv::Mat outMatWrap(AmpImg.rows, AmpImg.cols, AmpImg.type(), pOut);
      AmpImg.copyTo(outMatWrap);
 


Zum debuggen habe ich AmpImg als png speichern lassen nach allen Operationen, es ist an jeder Stelle noch Bildmaterial gespeichert.

Kann mir jemand weiterhelfen?

MfG


Karl2k

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2018, 07:07     Titel:
  Antworten mit Zitat      
Nach ewigem Versuchen habe ich es letztendlich doch hinbekommen: mexopencv hilft. Man muss nur beim Kompilieren der Librarys auf die korrekte Reihenfolge achten: v3.4.0 von opencv und opencv_contrib nutzen, erst opencv bauen, dann noch einmal zusätzlich mit den Zusatzmodulen aus opencV_contrib erstellen. Danach den Code von Matlab generieren lassen (DEBUG_TYPE entsprechend beachten) und zu guter Letzt in Visual Studio o.ä. einbinden/.obj linken. Dann lässt sich hier das MxArray(cv::Mat) nutzen, was ein OpenCV cv::Mat-Bildcontainer direkt und äußerst komfortabel in ein mxArray der Matlab Struktur umwandelt. Datentypen werden automatisch gesetzt, Dimensionierung muss nicht angegeben werden.
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.