vs 的spectral.imshow闪退

vs下使用python对高光谱遥感数据集及逆行处理
使用了spectral模块,但是在调用spectral.imshow函数时出现了闪退

import matplotlib.pyplot as plt
import numpy as np
from scipy.io import loadmat
import spectral

# # 获取mat格式的数据,loadmat输出的是dict,所以需要进行定位
input_image = loadmat('D:/yonghu/KSC/KSC.mat')['KSC']
output_image = loadmat('D:/yonghu/KSC/KSC_gt.mat')['KSC_gt']

# # input_image.shape#:(610, 340, 103)
# # output_image.shape#:(610, 340)
# # np.unique(output_image)  # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8)

# 统计每类样本所含个数
dict_k = {}
for i in range(output_image.shape[0]):
    for j in range(output_image.shape[1]):
        # if output_image[i][j] in [m for m in range(1,17)]:
        if output_image[i][j] in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]:
            if output_image[i][j] not in dict_k:
                dict_k[output_image[i][j]] = 0
            dict_k[output_image[i][j]] += 1

# 展示地物
ground_truth = spectral.imshow(classes = output_image.astype(int),figsize =(9,9))

ksc_color =np.array([[255,255,255],
     [184,40,99],
     [74,77,145],
     [35,102,193],
     [238,110,105],
     [117,249,76],
     [114,251,253],
     [126,196,59],
     [234,65,247],
     [141,79,77],
     [183,40,99],
     [0,39,245],
     [90,196,111],
        ])

ground_truth = spectral.imshow(classes = output_image.astype(int),figsize =(9,9),colors=ksc_color)

在调用 spectral.imshow 函数时出现闪退的情况可能是由于图像数据有问题导致的。首先可以检查一下输入的图像数据是否符合 spectral.imshow 函数的要求。

spectral.imshow 函数要求输入的图像数据必须是 numpy 数组,类型为 uint8 或者 float32,具有 2 到 4 个维度。如果输入的图像数据不符合这些要求,那么 spectral.imshow 函数可能会出现问题。

可以使用 numpy 的 dtype 函数来检查输入的图像数据的类型是否为 uint8 或者 float32,使用 numpy 的 ndim 函数来检查输入的图像数据的维度数是否在 2 到 4 之间。

在调用 spectral.imshow 函数之前,还需要确保 matplotlib 已经正常安装并且能够正常使用。如果 matplotlib 出现问题,那么 spectral.imshow 函数也可能会出现问题。

如果以上排查都没有解决问题,还可以尝试使用 numpy 的 load 函数加载 mat 格式的数据,看看是否能够正常载入数据。例如:

import numpy as np

input_image = np.load('D:/yonghu/KSC/KSC.mat')['KSC']
output_image = np.load('D:/yonghu/KSC/KSC_gt.mat')['KSC_gt']

在使用 spectral 模块的 imshow 函数时,可能会出现程序闪退的情况。这可能是由于数据的维度或数据类型不符合 imshow 函数的要求,或者是因为你使用的是 spectral 模块的旧版本,导致程序出现了错误。

为了解决这个问题,你可以尝试以下方法:

  • 检查数据的维度和数据类型是否符合 imshow 函数的要求。imshow 函数的帮助文档中提到,需要传入的参数是二维数组,其中行代表地物,列代表观测值。
  • 检查是否使用了 spectral 模块的最新版本。你可以使用 pip show spectral 命令查看当前使用的 spectral 版本,并使用 pip install spectral --upgrade 命令升级 spectral 版本。
  • 检查程序中是否有其他错误导致程序闪退。你可以在调用 imshow 函数之前加入一个断点,使用调试功能检查是否有其他错误导致程序闪退。
  • 你可以使用 matplotlib 模块中的 imshow 函数将输入图像和地物标签图像分别展示出来:
import matplotlib.pyplot as plt

# 展示输入图像
plt.imshow(input_image)
plt.show()

# 展示地物标签图像
plt.imshow(output_image)
plt.show()
  • 此外,你可以使用 matplotlib 模块中的 pcolor 函数将输入图像和地物标签图像分别展示出来:
import matplotlib.pyplot as plt

# 展示输入图像
plt.pcolor(input_image)
plt.show()

# 展示地物标签图像
plt.pcolor(output_image)
plt.show()
  • 你还可以使用 matplotlib 模块中的 pcolormesh 函数将输入图像和地物标签图像分别展示出来:
import matplotlib.pyplot as plt

# 展示输入图像
plt.pcolormesh(input_image)
plt.show()

# 展示地物标签图像
plt.pcolormesh(output_image)
plt.show()

关于vs运行后窗口闪退问题部分解决方案
借鉴下
https://blog.csdn.net/qq_38338872/article/details/79061001

首先要排查数据图像的格式问题,才好判断是什么问题