J'ai besoin d'un petit coup de pouce sur un problème avec QT . J'essaye d'afficher une image(8288 *5644) 16 bits en niveau de gris sur un QLabel. Cette image est stocké dans un tableau dynamique 1d d'entiers.
Voici les code:
GlobalStruct.h
#ifndef GLOBALSTRUCT_H
#define GLOBALSTRUCT_H
using namespace std;
typedef struct img
{
long * size;
long totalPixels;
int dim;
int *data;
} img;
#endif // GLOBALSTRUCT_H
fit.h
#ifndef FIT_H
#define FIT_H
#include "cfitsio/fitsio.h"
#include "GlobalStruct.h"
#include <vector>
#include <utility>
using namespace std;
class Fit
{
public:
static void open(const char* path, img* Img);
private:
static int getTotalPixel(int dim, long * size);
};
#endif // FIT_H
fit.cpp
#include "fit.h"
void Fit::open(const char* path, img * Img) {
int status = 0;
int nullval = 0;
int anynul = 0;
fitsfile* fptr;
fits_open_file(&fptr, path, READONLY, &status); // open file
fits_get_img_dim(fptr, &Img->dim, &status); // get dim of image (color or gray scale basicly
Img->size = (long*)malloc(Img->dim * sizeof(long));
fits_get_img_size(fptr, 2, Img->size, &status); // get size of image (pixels)
Img->totalPixels = getTotalPixel(Img->dim, Img->size);
Img->data = (int*)malloc(Img->totalPixels * sizeof(int));
fits_read_img(fptr, ULONG_IMG, 1, Img->totalPixels, &nullval, Img->data, &anynul, &status);
fits_close_file(fptr, &status);
}
int Fit::getTotalPixel(int dim, long* size) {
int multOfAllPixel = 1;
for (int i = 0; i < dim; i++)
multOfAllPixel *= size[i];
return multOfAllPixel;
}
Le problème ce situe dans la mainwindow.cpp. J'ai fournie le reste du code pour que vous puissiez le tester directement avec l'image en fit que j'ai fournie. Il faudra juste installer la librairie cfitsio. J'utilise le compilateur MSVC2019 vous pouvez donc installer la librairie facilement en utilisant vcpkg.
voici dans l'ordre:
- ce qu'on est censé voir (j'ai utilisé la même classe fit pour lire l'image. J'ai juste exporté en un csv 2d et ploter avec python)
- le résultat de la même image et du même tableau 1d mais sous qt
Des malloc en C++, ca semble mal parti de base. On dirait du code C que tu as copier-coller.
Comme l'image obtenue dans Qt est une partie de l'image d'origine, tu as probablement un problème de copie ou de format. Il faut que tu vérifies tes données et les formats.
C'est ce que je pense aussi cependant l'image a était prise avec une caméra monochromatique donc c'est bien du grayscale et la valeur max du tableau est 65520. On est donc bien sur du 16 bits/pixel.
c'est d'autant plus bizarre qu'avec pyqt j'ai réussie a le mettre sur un qlabel.(bon c'est pas franchement bizarre vue que je traite des tableau 2d en python)
QT. tableau 1d en QImage
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.