0

我通过 ROS 主题订阅提供了“rgb8”格式的味精。如何从中创建一个 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(...) 方法感染。

4

1 回答 1

0

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

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

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

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

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

于 2016-03-21T05:25:11.903 回答