比较有用的一些python代码 拉伸显示,维度转换

遥感图像拉伸显示

# 因为遥感图像数据位数是16位(uint16),需要使用5%的线性拉伸,不然显示起来不正常
def stretch_n(bands, lower_percent=5, higher_percent=95):
    # print(bands.dtype)
    # 一定要使用float32类型,原因有两个:1、Keras不支持float64运算;2、float32运算要好于uint16
    out = np.zeros_like(bands).astype(np.float32)
    # print(out.dtype)
    for i in range(bands.shape[2]):
        # 这里直接拉伸到[0,1]之间,不需要先拉伸到[0,255]后面再转
        a = 0  # np.min(band)
        b = 1  # np.max(band)
        # 计算百分位数(从小到大排序之后第 percent% 的数)
        c = np.percentile(bands[:, :, i], lower_percent)
        d = np.percentile(bands[:, :, i], higher_percent)
        t = a + (bands[:, :, i] - c) * (b - a) / (d - c)
        t[t < a] = a
        t[t > b] = b
        out[:, :, i] = t
    # print(out.dtype)

    return out


维度及类型转换示例

img=img.astype(np.float32)

img=img/255

img=np.swapaxes(img,0,2)

img=np.swapaxex(img,1,2)

img=img.rollaxis(img,0,3)

 x, y = 2 * np.transpose(x, (0, 3, 1, 2)) - 1, np.transpose(y, (0, 3, 1, 2))

### 如何使用一维数组显示图像 为了实现这一目标,首先需要理解如何将多维数组(通常是二维或三维用于表示灰度图或彩色图)转换成一维数组。对于色彩图像,在OpenCV中的默认颜色空间是BGR而Matplotlib则是RGB;因此处理过程中需要注意这一点[^1]。 #### 将图像转换为一维数组并重新构建以供显示 当涉及到从网络接收的数据流或是其他形式的一维数据时,可以按照预期尺寸重塑这些数据以便于可视化。下面给出的例子展示了怎样把一个由特定宽度和高度定义的图像转化为一维数组再恢复其原始结构进行展示: ```python import numpy as np import cv2 from matplotlib import pyplot as plt # 假设有一张300x100大小的彩色图片被拉伸成了长度为90,000的一维向量 image_flattened = ... # 这里应该是实际获取到的一维数组 # 定义原图的高度、宽度以及通道数(如果是彩色的话) height = 300 width = 100 channels = 3 # 对于彩色图像来说 # 把一维数组重构成原来的形状 (高 × 宽 × 颜色通道), 如果是灰度图则不需要最后一个维度 image_restored = image_flattened.reshape((height, width, channels)) # 显示重构后的图像 plt.figure(figsize=(8, 6)) if channels == 3: # 调整颜色顺序以匹配Matplotlib的要求 img_rgb = cv2.cvtColor(image_restored, cv2.COLOR_BGR2RGB) plt.imshow(img_rgb) else: plt.imshow(image_restored, cmap='gray') plt.axis('off') # 不显示坐标轴 plt.show() ``` 这段代码先创建了一个假设性的`image_flattened`变量代表已经获得的一维数组形式的图像数据。接着指定了该图像应有的几何属性——即它的宽高及是否有多个颜色层。最后一步就是调用`.reshape()`方法来重建图像矩阵,并根据情况决定是否要改变颜色模式以确保正确渲染[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值