QCustomPlot colorMap; масштаб не обновляется для нового набора данных

У меня есть цветовая карта qCustomPlot, созданная таким образом:

void MainWindow::plot_color_map(QCustomPlot *customPlot, cv::Mat image)
cv::Mat rotated_matrix = cv::Mat(image.rows,image.cols,CV_64FC3);

rotated_matrix.release();   
rotate_90n(image,rotated_matrix,90);

customPlot->clearGraphs();
customPlot->clearPlottables();

customPlot->axisRect()->setupFullAxesBox(true);
customPlot->xAxis->setLabel("x");
customPlot->yAxis->setLabel("y");
customPlot->xAxis->setScaleRatio(customPlot->yAxis,1.0);

QCPColorMap *colorMap = new QCPColorMap(customPlot->xAxis,customPlot->yAxis);
customPlot->addPlottable(colorMap);

colorMap->data()->setSize(rotated_matrix.rows,rotated_matrix.cols); 
colorMap->data()->setRange(QCPRange(0,rotated_matrix.cols),QCPRange(0,rotated_matrix.rows)); 

for(int col = 0; col < rotated_matrix.cols; ++col) {
    for(int row = 0; row < rotated_matrix.rows; row++) {
        colorMap->data()->setCell(row,col,rotated_matrix.at<double>(row,col));
    }
}

QCPColorScale *colorScale = new QCPColorScale(customPlot);

double min,max;
cv::minMaxLoc(rotated_matrix,&min,&max);
qDebug() << min << " " << max;
customPlot->plotLayout()->addElement(0,1,colorScale);
colorScale->setType(QCPAxis::atRight);
colorMap->setColorScale(colorScale); 
colorMap->setGradient(QCPColorGradient::gpJet);

colorMap->rescaleDataRange();

QCPMarginGroup *marginGroup = new QCPMarginGroup(customPlot);
customPlot->axisRect()->setMarginGroup(QCP::msBottom | QCP::msTop, marginGroup);
colorScale->setMarginGroup(QCP::msBottom | QCP::msTop, marginGroup);

customPlot->rescaleAxes();
customPlot->replot();

ColorMap отображается красиво, и диапазон масштабирования соответствует значениям "min" и "max", которые я выводил на консоль.

Однако если я затем изменю данные в изображении cv::Mat, масштаб не будет обновлен.

Например, если сначала диапазон данных составляет от 0,2 до 7,3, независимо от того, какие данные я выберу после этого, шкала останется от 0,2 до 7,3, она не изменится, чтобы отразить новый набор данных.

Любые идеи, как получить масштаб для автоматического обновления, чтобы соответствовать диапазону данных?

Если я закрою и снова открою программу, то при первом запуске функции масштаб всегда будет правильным, только после того, как будет нанесено другое изображение, оно не изменится.

Спасибо Митч

0 ответов

Другие вопросы по тегам