对图片进行crop操作

文章介绍了如何使用TensorFlow中的tf.image.crop_to_bounding_box函数进行图像中心裁剪,以及一个完整的Python代码示例,包括图像下载、预处理和展示,展示了如何将图片从URL加载到TensorFlow张量并进行大小调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、核心代码

中心裁剪:代码使用 tf.image.crop_to_bounding_box 函数对输入图像进行中心裁剪。这个函数接受以下参数:

  • data["image"]:要裁剪的图像。
  • (height - crop_size) // 2(width - crop_size) // 2:这些参数确定了裁剪框的左上角坐标,以确保在图像中心进行裁剪。
  • crop_size:裁剪的尺寸。
  • crop_size:裁剪的尺寸。

二、全量代码 

import matplotlib.pyplot as plt
import tensorflow as tf
from PIL import Image
from io import BytesIO
import requests
from keras import ops

# 定义 preprocess_image 函数
def preprocess_image(data, image_size=256):
    height = ops.shape(data["image"])[0]
    width = ops.shape(data["image"])[1]
    crop_size = ops.minimum(height, width)
    image = tf.image.crop_to_bounding_box(
        data["image"],
        (height - crop_size) // 2,
        (width - crop_size) // 2,
        crop_size,
        crop_size,
    )

    image = tf.image.resize(image, size=[image_size, image_size], antialias=True)
    return ops.clip(image / 255.0, 0.0, 1.0)

# 定义下载图像函数
def download_image(img_url):
    response = requests.get(img_url)
    if response.status_code == 200:
        return response.content
    else:
        return None

# 定义显示图像函数
def display_image(images,positions):
    plt.figure(figsize=(10, 5))
    for pos in positions:
      plt.subplot(1, 2, pos)
      plt.title("Image")
      plt.imshow(images[pos-1])
      plt.axis("off")
    plt.show()

# 定义主函数
def process_and_display_image(img_url, image_size=256):
    # 下载图像
    image_data = download_image(img_url)

    if image_data is not None:
        # 创建Pillow图像对象
        image = Image.open(BytesIO(image_data))
        # 转换为TensorFlow张量
        image = tf.convert_to_tensor(image)

        # 调用预处理函数进行图像预处理
        preprocessed_image = preprocess_image({"image": image}, image_size=image_size)

        # 显示原始图像和预处理后的图像
        display_image([image,preprocessed_image.numpy()],[1,2])
    else:
        print("Failed to retrieve the image.")

# 调用主函数并传递图像URL和其他参数
img_url = 'https://pic1.zhimg.com/80/v2-23e87ffc0da8098a9f7d733cdee58ff4_1440w.webp?source=2c26e567'
process_and_display_image(img_url)

三、结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值