【Python图像处理局部放大】输入图像,选择两处不同的区域进行放大操作,然后将原始图像、处理后的两个区域以及标记合成新图像进行展示

NeRF-w 渲染后的图像效果的定性对比,对局部放大以观察细节效果。如下

对单张渲染后的图像,选择指定区域并进行放大操作,然后将原始图像、处理后的两个区域以及标记连线的新图像,如下图

代码

python 复制代码
from PIL import Image, ImageDraw

# 读取并放大图片的指定区域
def process_image(image_path):
    # 打开图像
    img = Image.open(image_path)

    # 获取图像的宽度和高度
    width, height = img.size

    # 确定选中区域1的大小(假设为原始高度的三分之一)
    size1 = height // 3
    half_size1 = size1 // 2

    # 确定选中区域2的大小(假设为原始高度的五分之一)
    size2 = height // 5
    half_size2 = size2 // 2

    # 确定区域1的坐标(右上方)
    box1 = (max(0, width // 2), max(0, height // 2 - size1), min(width, width // 2 + size1), min(height, height // 2))

    # 确定区域2的坐标(左下方)
    box2 = (max(0, width // 2 - size2), max(0, height // 2), min(width, width // 2), min(height, height // 2 + size2))

    # 复制选定的区域并放大
    region1 = img.crop(box1)
    region1 = region1.resize((region1.width * 2, region1.height * 2))
    region2 = img.crop(box2)
    region2 = region2.resize((region1.width, region1.height))

    # 在原始图像上绘制矩形框
    draw = ImageDraw.Draw(img)
    draw.rectangle(box1, outline='red', width=3)
    draw.rectangle(box2, outline='blue', width=3)

    # 在子图上绘制矩形框
    draw1 = ImageDraw.Draw(region1)
    draw2 = ImageDraw.Draw(region2)
    draw1.rectangle((0, 0, region1.width, region1.height), outline='red', width=3)
    draw2.rectangle((0, 0, region2.width, region2.height), outline='blue', width=3)

    # 创建一个新的空白图像,大小为原始图像的宽度,高度为原始图像高度加上最大高度的子图以及一些间隙
    # new_height = height + max(region1.height, region2.height) + 30  # 加上一些间隙
    new_height = height + max(region1.height, region2.height)  # 加上一些间隙
    new_img = Image.new('RGB', (width, new_height))

    # 计算子图位置
    offset = 10  # 两个子图之间的间隙
    new_img.paste(img, (0, 0))
    new_img.paste(region1, (width // 2, height + offset))
    new_img.paste(region2, (0, height + offset))

    # 获取两个矩形框的中心点
    box1_center = ((box1[0] + box1[2]) // 2, box1[3])  # 取框下中心
    box2_center = ((box2[0] + box2[2]) // 2, box2[3])  # 取框下中心
    region1_center = (width // 2 + region1.width // 2, height + offset)  # 取子图上中心
    region2_center = (region2.width // 2, height + offset )  # 取子图下中心

    # 在原图区域框的下面和子图框的上面绘制红色和蓝色的连线
    draw_line = ImageDraw.Draw(new_img)
    draw_line.line([box1_center, region1_center], fill='red', width=2)
    draw_line.line([box2_center, region2_center], fill='blue', width=2)

    return new_img



# 读取5张图片并处理
image_paths = ["./test_images/001.png", "./test_images/002.png", "./test_images/003.png", "./test_images/004.png", "./test_images/005.png"]

for i, path in enumerate(image_paths):
    new_image = process_image(path)
    new_image.save(f"./test_images/new_image_{i + 1}.jpg")  # 保存新的图片

这段代码是一个Python脚本,用于处理输入的图像文件,选择特定区域并对其进行放大操作,然后将原始图像、处理后的两个区域进行标记后的新图像保存到文件中。以下是代码的总结:

  1. 处理图像功能

    • 打开并读取图像。
    • 确定两个指定区域的位置和大小。
    • 选取指定区域并放大。
    • 在原始图像和子图上绘制矩形框。
  2. 创建新图像

    • 创建一张新的空白图像。
    • 将原始图像和两个处理后的区域放置在新图像中,并绘制连接这些区域的线条。
  3. 处理多张图像

    • 循环处理图像列表中的每张图像。
    • 保存处理后的图像。

总结:

该代码用于处理图像中的特定区域并放大,并在新图像上显示原始图像、处理后的两个区域,以及用颜色标记连接这些区域。

注意:

  • 在处理过程中,子图的位置被计算,然后这些子图被粘贴到新图像中。
  • 连接线的位置是根据处理后的区域和原始图像区域的中心点进行绘制。

对以上代码进行改进,由鼠标选中需要放大的两个图像区域 。

相关推荐
Blossom.1189 分钟前
基于深度学习的图像识别:从零构建卷积神经网络(CNN)
人工智能·深度学习·神经网络·机器学习·cnn·机器人·transformer
DeepReinforce15 分钟前
开源的大语言模型(LLM)应用开发平台Dify
人工智能·语言模型·开源
AI妈妈手把手20 分钟前
【深度学习框架终极PK】TensorFlow/PyTorch/MindSpore深度解析!选对框架效率翻倍
人工智能·pytorch·python·深度学习·tensorflow·mindspore·ai选型指南
火山引擎开发者社区24 分钟前
Prompt Engineering 快速入门+实战案例
人工智能·prompt
YangYang9YangYan38 分钟前
数学金融与金融工程:学科差异与选择指南
人工智能·金融
泡芙萝莉酱40 分钟前
世界各国和地区ICRG政治经济金融综合风险指标数据(1984-2023年)-实证数据
大数据·人工智能·深度学习·数据挖掘·数据分析·数据统计·实证数据
说私域43 分钟前
共享模式、社群与开源链动2+1模式AI智能名片S2B2C商城小程序的协同发展研究
人工智能·小程序
柏峰电子1 小时前
太阳辐射监测站:洞察太阳能量的科技之眼
人工智能
技术与健康1 小时前
【Android代码】绘本翻页时通过AI识别,自动通过手机/pad朗读绘本
android·人工智能·智能手机
焦点问界2 小时前
Newline全场景方案闪耀2025中国智慧生活大会
大数据·人工智能