Как я могу представить данные цветовой карты в QwT из cv :: Mat? - PullRequest
0 голосов
/ 26 марта 2019

Я разрабатываю приложение на c ++ с Qt и Qwt framework для научных сюжетов.У меня есть матричные данные, хранящиеся как cv::Mat, представляющие изображение со скалярными данными (MxN), которое необходимо визуализировать в виде карты цветов.

В OpenCV это выполняется с использованием cv::applyColorMap(img,cm_img,cv::COLORMAP_JET) и cv::imshow("img name", img), какописано здесь

Я попытался преобразовать cv::Mat в QImage, как описано здесь и здесь , но, похоже, не работаетдолжным образом.Когда я пытаюсь показать получающиеся изображения, это не имеет смысла.

Из Qwt есть некоторые классы, которые выглядят интересными в этом отношении: QwtMatrixRasterData , QwtPlotSpectrogram или QwtPlotRasterItem .

То, что мне нужно в качестве окончательного вывода, будет примерно таким.Учитывая матрицу (MxN) с двойными значениями, вызывая что-то наподобие imshow, я получаю цветное изображение, подобное этому

colormap

1 Ответ

0 голосов
/ 05 апреля 2019

Мы пришли, используя 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);
    }
  }
...