ROS QImage之间的图像格式兼容性

时间:2016-03-21 04:17:25

标签: qml rgb ros qimage opencv-mat

我有" rgb8"格式msg通过ROS主题订阅提供。 如何创建一个QImage并让qml Image显示它上面的图片? 目前,我正在处理以下代码段。

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)由来自qml方面的imageRequest(...)方法的源代码'属性。

1 个答案:

答案 0 :(得分:0)

您应该参考QQuickImageProvider。创建继承QQuickImageProvider并实现requestImage()或requestPixmap()的q ROSImageProvider类,然后在QMLEngine中注册它:

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

然后您可以使用以下QML语法来获取图像:

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

您可以参考Qt文档以获取完整示例。