2016-03-21 19 views
0

Ich habe "rgb8" Format msg über ROS Thema Abonnement geliefert. Wie kann man ein QImage daraus erstellen und das qml Image das Bild darauf anzeigen lassen? Derzeit arbeite ich an dem folgenden Code-Snippet.Bildformat Kompatibilität zwischen ROS QImage

QImage *VideoPlayer::Mat2QImage(cv::Mat const& src) 
{ 
    QImage *imgPtr = new QImage((const uchar *) src.data, 
       src.cols, src.rows, src.step, QImage::Format_RGB888); 
    imgPtr->bits(); 
    return imgPtr; 
} 

void VideoPlayer::imageCallback(const sensor_msgs::ImageConstPtr& msg) 
{ 
    static int count = 0; 
    try 
    { 
    try { 
     Mat imgMat = cv_bridge::toCvShare(msg, "rgb8")->image; 

     delete imgProvider->currentShot; 
     imgProvider->currentShot = Mat2QImage(imgMat); 
    ... 
} 

(* currentShot) durch imageRequest (...) Methode aus qml Seite 'Quelle' Eigenschaft fecthed.

Antwort

0

Sie sollten sich beziehen auf QQuickImageProvider. Erstellen q ROSImageProvider Klasse, die QQuickImageProvider erben und implementieren requestImage() oder requestPixmap() und dann registrieren sie in QMLEngine:

engine->addImageProvider(QLatin1String("ros"), new ROSImageProvider); 

Und dann können Sie die folgende QML-Syntax Bild zu bekommen:

Image { source: "ros://some_id" } 

Sie können auf die Qt-Dokumentation für das vollständige Beispiel verweisen.

+0

Danke, aber mein Qml Aufruf RequestImage() -Methode wie erforderlich. Das Problem ist qml Bild zeigt das übertragene Bild nicht an (ich denke). Also, ich denke, ich bin unwissend auf Bildcodierungsformat oder etwas. In der qml-Datei habe ich diesen Abschnitt: "Image {... source:" image: // images/"+ imageSN ...}" –

+0

1. Haben Sie versucht, das QImage in eine Datei zu speichern und zu verifizieren? 2. Gibt es eine Fehlermeldung in der Debug-Nachricht? – diro

+0

In der Tat habe ich es einfach getan. Es speichert die PNG-Datei korrekt. Dies geschieht durch "imgProvider-> currentShot-> save (" delta.png ");" - Dieser Befehl. Hier ist currentShot ein Zeiger auf ein QImage. –