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

news/2024/7/21 7:35:33 标签: 图像处理, 计算机视觉, 人工智能

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

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

代码

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. 处理多张图像

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

总结:

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

注意:

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

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


http://www.niftyadmin.cn/n/5135622.html

相关文章

30秒get视频号视频如何下载,保存视频号视频到本地方法!

终于可以告别无法下载视频号视频的烦恼啦!下面是一些只需 30 秒就能get到的t视频号视频如何下载方法,让我们一起来探索如何保存视频号视频到本地方法吧! 首先,要记得这些方法仅适用于个人观看或学习使用,不可用于商业用…

基于非对称加密证书(算法)机制实现的单向身份鉴别和双向身份鉴别原理

单向认证一般是指客户端确认服务端身份,而双向认证一般是指客户端和服务器端都需要验证对方的身份。 双向认证的客户端需要从服务器端下载服务器的公钥证书进行验证,还需要把客户端的公钥证书上传到服务器端给服务器端进行验证,等双方都认证…

系列四十二、Spring的事务传播行为案例演示(二)#REQUIRED

一、演示Spring的默认传播行为(REQUIRED) 1.1、运行之前表中的数据 1.2、StockServiceImpl /*** Author : 一叶浮萍归大海* Date: 2023/10/30 15:43* Description:*/ Service(value "stockServiceREQUIRED") public class StockServiceImpl…

如何在 Mac 上切换用户?

如果您想与其他人共享您的 Mac,创建一个独立于您的个人帐户的新用户帐户可能会有所帮助。然而,不利的一面是,时不时地在不同的用户帐户之间切换可能是一件耗时的事情。幸运的是,我创建了本指南,解释如何在 Mac 上快速切…

dracut添加指定固件

文章目录 linux-firmware1、固件介绍2、Microcode updates for CPUs3、如何添加固件 linux-firmware 1、固件介绍 存放在 /lib/firmware,固件来自kernel 仓库更多的固件可以参考git仓库,https://git.kernel.org/pub/scm/linux/kernel/git/firmware/lin…

数据库2。。

创建临时表 create temporary table test1 ( id int(4) primary key, name char(10), sex char(2) ); 创建历史表一般用于调试,而且创建临时创建之后在表目录当中是不显示的,连接退出之后,临时表会被销毁,而…

系列四十一、Spring的事务传播行为案例演示(一)准备工作

一、准备工作 1.1、前置准备 本次演示以我们日常网上购物的方式进行演示,一般下单后会经过如下几个流程:下订单>付款>减库存>发货>增积分,我们以减库存和增积分这两个环节来演示Spring中事务的传播行为。这里为了方便&#xff0…

正则表达式从HTML字符串中替换img标签

str str.replace(/<img.?src["](.?)["].*?>/gs, "【图片】/*要替换的内容*/");