如何从cv :: Mat表示QwT中的颜色图数据?

时间:2019-03-26 12:41:47

标签: c++ qt opencv colormap qwt

我正在使用带有Qt和Qwt框架的c ++开发用于科学绘图的应用程序。我将矩阵数据存储为cv::Mat,表示具有标量数据(MxN)的图像,需要将其可视化为色图。

OpenCV使用cv::applyColorMap(img,cm_img,cv::COLORMAP_JET)cv::imshow("img name", img)执行,如here所述

我已经尝试将cv::Mat转换为QImage,如herehere所述,但似乎无法正常工作。当我尝试显示生成的图像时,这没有任何意义。

在Qwt中,有些类对此很有趣:QwtMatrixRasterDataQwtPlotSpectrogramQwtPlotRasterItem

我需要的最终输出将是这样的。 给定具有双值的矩阵(MxN),调用imshow之类的东西,我将得到一个这样的颜色图图像

colormap

1 个答案:

答案 0 :(得分:0)

我们使用QCustomPlot来了,向它发送了QVector<double>

想法是从QVector创建cv::Mat

QVector<double> cvMatToQVector(const cv::Mat& mat) {
  QVector<double> image;
  auto img_ptr = img.begin<double>();

  for (; img_ptr < img.end(); img_ptr++) {
    image.append(*img_ptr) = element;
  }
  return image;
}

然后我们创建一个QCPColorMap* colorMap并用QVector vec数据填充它:

  for (int yIndex = 0; yIndex < col; ++yIndex) {
    y_col = yIndex * col;
    for (int xIndex = 0; xIndex < row; ++xIndex) {
      z = vec.at(xIndex + y_col);
      colorMap->data()->setCell(xIndex, yIndex, z);
    }
  }