У меня есть CSV-файл (128 столбцов и 2815 строк), где значения варьируются от 0 до 1. Я хочу отобразить его в виде серого масштабированного изображения. Что мне делать? В matlab я могу просто прочитать файл csv и вызвать функцию images c и установить цветовую карту на серый, чтобы отобразить ее как изображение в оттенках серого, и аналогично это можно сделать в Opencv. В Qt, что я должен сделать, чтобы отобразить его в Qgraphicsview. Я новичок в Qt, может кто-нибудь описать это в простейшей форме.
Вот код, который я пытался реализовать.
imshow("image", ImageOutf);
QImage imageObject3(ImageOutf.data, ImageOutf.cols, ImageOutf.rows, ImageOutf.step, QImage::Format_Grayscale16);
scene1 = new QGraphicsScene(this);
image = QPixmap::fromImage(imageObject3);
scene1->addPixmap(QPixmap::fromImage(imageObject3));
ui->graphicsView->setScene(scene1);
ui->graphicsView->setBackgroundBrush(QBrush(QColor(16,16,16), Qt::SolidPattern));
ui->graphicsView->fitInView((scene1->itemsBoundingRect()));
"ImageOutf" - это объект cv Mat, который имеет 128 столбцы и 2815 строк. Я прилагаю скриншот результатов, которые я получаю. Я не получаю то же изображение. Может кто-нибудь объяснить, почему это отличается. ![enter image description here](https://i.stack.imgur.com/31b8P.png)
** Примечание: мой необработанный файл является CSV-файл. Сначала я преобразовал его в вектор вектора или матрицы, затем в матрицу в opencv mat, затем в mat в QImage, а затем попытался отобразить qimage. Я отправляю коды ниже:
1) CSV в Matrix
using vec = vector<float>;
using matrix = vector<vec>;
matrix readCSV(string filename)
{
matrix M;
ifstream in(filename);
string line;
while (getline(in, line)) // read a whole line of the file
{
stringstream ss(line); // put it in a stringstream (internal stream)
vec row;
string data;
while (getline(ss, data, ',')) // read (string) items up to a comma
{
row.push_back(stof(data));
}
if (row.size() > 0) M.push_back(row); // add non-empty rows to matrix
}
return M;
}
2) Matrix to Mat
Mat matrixtoMAT(const matrix& M, int R, int C)
Mat Img_Data;
Img_Data = Mat::zeros(R, C, CV_32FC1);
for (int i = 0; i < M.size(); i++)
{
for (int j = 0; j < M[i].size(); j++)
{
Img_Data.at<float>(i, j) = M[i][j];
}
}
return Img_Data;
}
3) Мат для QImage
QImage imageObject3(ImageOutf.data, ImageOutf.cols, ImageOutf.rows,ImageOutf.step, QImage::Format_Indexed8);