使用qt显示geotiff图像

Display geotiff images with qt

本文关键字:图像 geotiff 显示 qt 使用      更新时间:2023-10-16

我目前正试图使一个图形界面的脚本投影dsm (geotiff文件)上的图像。我认为在做一些计算之前同时显示图像和DSM是一个好主意。不幸的是,即使显示图像没有问题,我在尝试显示DSM时也会出现以下错误:

TIFFReadDirectory: Warning, foo: unknown field with tag 33550 (0x830e) encountered.
TIFFReadDirectory: Warning, foo: unknown field with tag 33922 (0x8482) encountered.
TIFFReadDirectory: Warning, foo: unknown field with tag 42112 (0xa480) encountered.
TIFFReadDirectory: Warning, foo: unknown field with tag 42113 (0xa481) encountered.
foo: Sorry, can not handle images with 32-bit samples.
QPixmap::scaled: Pixmap is a null pixmap

这是我目前正在尝试的:

QString s1 = QFileDialog::getOpenFileName(this, "Open a DSM", "/home", "Images (*.png *.xpm *.jpg *.tif *.tiff)");
ui->DSMPath->setText(s1);
QPixmap dispdsm(s1);
int w = ui->DSMDisplay->width();
int h = ui->DSMDisplay->height();
ui->DSMDisplay->setPixmap(dispdsm.scaled(w,h,Qt::KeepAspectRatio));

我在网上搜索了一下,但似乎还没有解决办法。

我确切地说,我正在用QT、OpenCV和magick++库在Ubuntu上工作。

有人能帮帮我吗?非常感谢:)

Kuba Ober是对的,但是对于那些想要显示geotiff图像而不定义自己的QImageIOHandler和使用OpenCV的人来说,您可以将geotiff图像加载为OpenCV矩阵并将其转换为QImage。

下面是我的例子中的转换:

QImage image= QImage((uchar*) dsm.data, dsm.cols, dsm.rows, dsm.step, QImage::Format_ARGB32_Premultiplied);
QPixmap dispdsm = QPixmap::fromImage(image);

其中dsm在我的OpenCV矩阵中,dispdsm是它的可显示版本。

Qt根本不支持您使用的格式的图像。您需要为libgeotiff使用自己的QImageIOHandler包装器。