基于TransU-Net的遥感图像语义分割与分类,遥感建筑物数据集,基于Pytorch框架,针对不同城市建筑物精准提取,包含一万多字报告,如图所示,有代码+数据集+模型

在这里插入图片描述

方案一:生成类似图片中的网页缩略图列表 (HTML + CSS)

如果你想做一个网页来展示这些图片,让它们像图中那样整齐排列,可以使用以下代码。

使用方法:
创建一个文件夹。
将你的图片(0.PNG, 1.PNG…)放入该文件夹。
创建一个 index.html 文件,粘贴以下代码。

图片切片预览

    body {
        font-family: Arial, sans-serif;
        background-color: #f4f4f4;
        padding: 20px;
    }
    .gallery {
        display: flex;
        flex-wrap: wrap;
        gap: 15px;
        justify-content: center;
    }
    .image-card {
        background: white;
        border: 1px solid #ddd;
        border-radius: 8px;
        padding: 10px;
        width: 150px;
        text-align: center;
        box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        transition: transform 0.2s;
    }
    .image-card:hover {
        transform: scale(1.05);
        border-color: #007bff;
    }
    .image-card img {
        max-width: 100%;
        height: auto;
        border-radius: 4px;
    }
    .filename {
        margin-top: 8px;
        font-size: 14px;
        color: #333;
        word-break: break-all;
    }



    



    // 假设你有 0.PNG 到 19.PNG
    const totalImages = 20;
    const container = document.getElementById('gallery');

    for (let i = 0; i 

方案二:Python 批量重命名/整理代码

运行脚本。

import os

def rename_images_in_folder(folder_path):
# 支持的图片格式
valid_extensions = (‘.png’, ‘.jpg’, ‘.jpeg’, ‘.bmp’, ‘.gif’)

# 获取所有图片文件
files = [f for f in os.listdir(folder_path) if f.lower().endswith(valid_extensions)]

# 排序,确保顺序一致
files.sort()

print(f"找到 {len(files)} 个图片文件,开始重命名...")

for index, filename in enumerate(files):
    # 构造新的文件名,例如 0.PNG, 1.PNG
    # 注意:原图是大写扩展名,这里统一转为大写 .PNG
    new_name = f"{index}.PNG"

    # 获取完整路径
    old_path = os.path.join(folder_path, filename)
    new_path = os.path.join(folder_path, new_name)

    # 如果新旧名字不一样才重命名
    if old_path != new_path:
        try:
            os.rename(old_path, new_path)
            print(f"重命名: {filename} -> {new_name}")
        except FileExistsError:
            print(f"跳过: {new_name} 已经存在")

print("处理完成!")

if name == “main”:
# 当前目录
current_dir = os.getcwd()
rename_images_in_folder(current_dir)

方案三:Python 图片拼接代码 (进阶)

from PIL import Image
import os

def stitch_images(folder_path, images_per_row):
images = []
# 读取所有PNG文件
files = [f for f in os.listdir(folder_path) if f.lower().endswith(‘.png’)]
files.sort(key=lambda x: int(os.path.splitext(x)[0])) # 按数字排序

for f in files:
    images.append(Image.open(os.path.join(folder_path, f)))

if not images:
    print("未找到图片")
    return

# 获取单张图片的尺寸
w, h = images[0].size

# 计算总行数和总尺寸
rows = (len(images) + images_per_row - 1) // images_per_row
total_width = images_per_row * w
total_height = rows * h

# 创建空白大图
new_img = Image.new('RGB', (total_width, total_height))

for idx, img in enumerate(images):
    x = (idx % images_per_row) * w
    y = (idx // images_per_row) * h
    new_img.paste(img, (x, y))

new_img.save('stitched_result.jpg')
print("拼接完成,保存为 stitched_result.jpg")

在这里插入图片描述

代码示例

import os
import numpy as np
from PIL import Image

配置参数
IMAGE_SIZE = (256, 256) # 图片尺寸
OUTPUT_DIR = “masks” # 输出文件夹
NUM_IMAGES = 20 # 生成图片的数量 (0-19)

创建输出目录
if not os.path.exists(OUTPUT_DIR):
os.makedirs(OUTPUT_DIR)

def generate_mask(index):
“”"
模拟生成一个语义分割掩膜。
在实际应用中,这里应该是你的模型预测结果或者标注数据。
“”"
# 创建一个空的灰度图像数组 (0 = 黑色/背景)
mask_array = np.zeros(IMAGE_SIZE, dtype=np.uint8)

# --- 模拟不同的类别区域 ---
# 类别 1: 灰色 (例如: 道路) - 值设为 128
# 这里用简单的几何图形模拟,实际中通常是复杂的轮廓
cv2_rectangle = lambda img, val: cv2.rectangle(img, (50, 50), (200, 200), val, -1)

# 根据索引改变图案位置,模拟不同的图片
offset = (index * 10) % 100

# 背景 (黑色, 0) 已经在初始化时完成

# 绘制类别 1 (灰色, 128) - 模拟“道路”或“中间区域”
mask_array[50+offset:200-offset, 50:200] = 128

# 绘制类别 2 (白色, 255) - 模拟“建筑物”或“前景”
mask_array[80:180, 80+offset:180] = 255

# 添加一些随机噪声或细节,使其看起来更像真实的分割图
noise = np.random.randint(0, 20, IMAGE_SIZE, dtype=np.uint8)
mask_array = np.clip(mask_array + noise, 0, 255)

return mask_array



# 转换为PIL图像 (模式 'L' 代表 8位灰度)
img = Image.fromarray(mask_data, mode='L')

# 保存文件
filename = f"{i}.PNG"
img.save(os.path.join(OUTPUT_DIR, filename))

print(“生成完成!”)

代码解析

灰度模式 (‘L’):代码中使用了 mode=‘L’,这对应了 8-bit 像素,黑白模式。这是语义分割 Mask 的标准格式。
像素值含义:
0 (黑色):通常代表“背景”或“无数据”。
128 (灰色):代表“类别 1”(例如道路)。
255 (白色):代表“类别 2”(例如建筑物)。

import os
from PIL import Image

def merge_images(image_folder, output_path, grid_size=(4, 5)):
“”"
将切分的小图拼接成一张大图。
grid_size: (列数, 行数),根据你的图看大概是 6列 x 3行 (虽然缺了6和18)
“”"
images = []
# 获取文件列表并排序
file_names = sorted([f for f in os.listdir(image_folder) if f.endswith(‘.PNG’)], key=lambda x: int(os.path.splitext(x)[0]))

for file_name in file_names:
    images.append(Image.open(os.path.join(image_folder, file_name)))

if not images:
    print("未找到图片")
    return

# 假设所有图片大小一致
w, h = images[0].size

# 创建空白大图
# 注意:这里简单估算,实际需要根据你的具体排列逻辑调整
cols, rows = grid_size
result_width = cols * w
result_height = rows * h

new_img = Image.new('RGB', (result_width, result_height), color=(128, 128, 128))

for idx, img in enumerate(images):
    # 计算位置
    col = idx % cols
    row = idx // cols
    box = (col * w, row * h)
    new_img.paste(img, box)

new_img.save(output_path)
print(f"拼接完成,保存为: {output_path}")

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐