gdal 读取图像
image = gdal.Open(path)
width = image.RasterXSize #获取宽度
height = image.RasterYSize #获取高度
allLayer = image.ReadAsArray(0, 0, width, height) #指定范围获取图像数组
用这种方式获取的图像数组allLadsyer的shape是[RasterCount,RasterYSize,RasterXSize]形式的,即[波段数,图像高,图像宽]
这种形式与QImage中常用的[图像高,图像宽,波段数]shape的形式是不同的,如果不做转换,在显示时只能展示出一个波段的灰度图像
所以,在显示之前,要使用numpy对数组做一个转换处理
showLayer = np.rollaxis(allLayer, 0, 3)
处理之后的shape时符合显示要求的。
接下来就可以使用QImage显示图片
class ImageLabel(QGraphicsView):
# 显示整幅图像
def showImage(self, image_array):
height, width, bytesPerComponent = image_array.shape
size = QSize(self.size().width() - 10, self.size().height() - 10)
bytesPerLine = bytesPerComponent * width
self.QImg = QImage(image_array.tobytes(), width, height, bytesPerLine, QImage.Format_RGB888)
self.pixmap = QPixmap.fromImage(self.QImg).scaled(size, Qt.KeepAspectRatio, Qt.SmoothTransformation)
self.item = QGraphicsPixmapItem(self.pixmap)
self.scene = QGraphicsScene() # 创建场景
self.scene.addItem(self.item)
self.setScene(self.scene)