如何使用Python图像库(PIL)突出显示图像的一部分?

2024-04-24

如何突出显示图像的一部分? (位置定义为 4 个数字的元组)。你可以想象它就像我有电脑主板的图像,我需要突出显示例如CPU插槽所在的部分。


请注意,对于 Python 3,您需要使用pillow https://pypi.org/project/Pillow/PIL 的分支,它是原始模块的一个主要向后兼容的分支,但与它不同的是,目前正在积极维护。

这是一些示例代码,展示了如何使用PIL.ImageEnhance.Brightness https://pillow.readthedocs.io/en/latest/reference/ImageEnhance.html#PIL.ImageEnhance.PIL.ImageEnhance.Brightness class.

做你想做的事需要多个步骤:

  • 要突出显示的部分是从图像中剪切或裁剪出来的。
  • 的一个实例Brightness类是根据这个裁剪后的图像创建的。
  • 裁剪后的图像通过调用变亮enhance()的方法Brightness实例。
  • 裁剪后的、现在变亮的图像将被粘贴回其原来的位置。

为了使这些操作更容易重复,下面是一个名为highlight_area()来执行它们。 请注意,我还添加了一个奖励功能这将选择性地用彩色边框勾勒出突出显示的区域——如果您不需要或不想要的话,当然可以将其删除。

from PIL import Image, ImageColor, ImageDraw, ImageEnhance


def highlight_area(img, region, factor, outline_color=None, outline_width=1):
    """ Highlight specified rectangular region of image by `factor` with an
        optional colored  boarder drawn around its edges and return the result.
    """
    img = img.copy()  # Avoid changing original image.
    img_crop = img.crop(region)

    brightner = ImageEnhance.Brightness(img_crop)
    img_crop = brightner.enhance(factor)

    img.paste(img_crop, region)

    # Optionally draw a colored outline around the edge of the rectangular region.
    if outline_color:
        draw = ImageDraw.Draw(img)  # Create a drawing context.
        left, upper, right, lower = region  # Get bounds.
        coords = [(left, upper), (right, upper), (right, lower), (left, lower),
                  (left, upper)]
        draw.line(coords, fill=outline_color, width=outline_width)

    return img


if __name__ == '__main__':

    img = Image.open('motherboard.jpg')

    red = ImageColor.getrgb('red')
    cpu_socket_region = 110, 67, 274, 295
    img2 = highlight_area(img, cpu_socket_region, 2.5, outline_color=red, outline_width=2)

    img2.save('motherboard_with_cpu_socket_highlighted.jpg')
    img2.show()  # Display the result.

这是使用该函数的示例。原始图像显示在左侧,与使用示例代码中显示的值调用该函数所得到的图像相对。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Python图像库(PIL)突出显示图像的一部分? 的相关文章

随机推荐

  • 将 Excel 行输出到一系列文本文件

    在 Excel 中 我在 A 列中有一个文章名称列表 在 B 列中有一个免责声明 现在 对于 A 列中的每篇文章 我想创建一个文本文件 A 是文件的标题 B 是文件的标题 免责声明是文件的内容 这可能吗 我的想法是 我有数百个这样的东西 我
  • 如何 .gitignore 文件夹中的所有文件/文件夹,但不忽略文件夹本身? [复制]

    这个问题在这里已经有答案了 我想将一个空白文件夹签入我的 Git 存储库 实际上 我需要忽略文件夹中的所有文件和文件夹 但不是文件夹本身 我怎样才能做到这一点 我应该在我的 gitignore file 对于那些想知道为什么我要这样做的人
  • 使用这种语法的原因是什么 (0, _.Em)();

    在研究 google plusone 脚本时 我多次看到以下语法 0 Em 假设 Em是一个函数 上面的语句将导致调用该函数 这是非常明显的 另一方面 如果它是未定义的 结果岂不是与简单地执行相同 Em 任何人都可以阐明使用这种语法背后的想
  • 2018 年模块内测试/模拟功能的最新技术是什么?

    我有一个用于学习测试的模块 如下所示 api js import axios from axios const BASE URL https jsonplaceholder typicode com const URI USERS user
  • Google 地图 iOS SDK 和故事板

    我希望有人能解释如何开始使用 Google 地图和 Xcode 故事板 我找不到任何有关如何实际操作的信息 我只需要一个例子或采取的步骤 有这个http www youtube com watch v r3H8dFG0UCY http ww
  • PyCrypto 可以检查文件是否已经 AES 加密?

    from Crypto Cipher import AES def encrypt file key in filename out filename None chunksize 64 1024 Encrypts a file using
  • Fusion Tables 层 URL 请求限制(2048 个字符)

    我正在使用 Google 地图突出显示一些国家 并使用 Fusion Tables 来获取几何图形 您可以在此处查看一个示例 http jsfiddle net 4mtyu 689 http jsfiddle net 4mtyu 689 v
  • 使用 netcat 提供包含图像的 HTTP 响应

    我正在尝试使用 netcat 编写一个小型 HTTP 服务器 对于纯文本文件 这工作正常 但当我尝试发送图片时 浏览器仅显示损坏图像的图标 我所做的就是提取所请求文件的 mime 类型和大小 并将其发送给客户端 我的示例图片的请求标头如下所
  • 从回调中递归调用函数会导致堆栈溢出吗?

    我想在事件触发后调用一个函数 然后在同一个回调中再次调用该函数 这是为了在函数完成时创建一种事件侦听器 当你看到代码时你就会知道我想做什么 use strict var page require webpage create var sys
  • 我可以将多个线程分配给 OpenMP 中的代码段吗?

    我正在寻找一种方法来并行执行代码部分 每个部分使用多个线程 例如 如果我有 16 个线程和两个任务 我希望每个线程有 8 个线程同时执行这两个任务 OpenMP 有多种构造 section task 并行执行一般代码 但它们是单线程的 在我
  • mypy 在参数化泛型中 isinstance 和 issubclass 从 python 3.5 到 3.6 的差异

    在我从 python 3 5 升级到 python 3 6 之前 这是有效的 import typing issubclass list typing List int returns True isinstance 1 2 3 typin
  • 将未转义文本从字段添加到 postgres 中的正则表达式的正确方法?

    将字段中的文字文本值添加到 postgres 中的正则表达式的正确方法是什么 例如 如果不进行转义 some field 可能包含无效的正则表达式语法 where some text m some field M 最简单的方法是使用正则表达
  • 找不到模块:错误:无法使用 TypeScript 定义文件解析“openlayers”

    在使用 TypeScript 的 Visual Studio 2017 React 应用程序中 有一个使用 OpenLayers v4 6 5 的组件 Map tsx package json 文件加载 types openlayers 和
  • Perl 代码的多线程

    我需要知道如何为以下代码实现多线程 我需要每秒调用此脚本 但睡眠计时器会在 2 秒后处理它 总共脚本每 3 秒调用一次 但我需要每秒调用它 任何人都可以为我提供解决方案或为我指出正确的方向 usr bin perl use warnings
  • ProgressDialog 未在 UIThread 中显示

    我正在使用 google api lib 创建地图 因为地图小部件需要很长时间才能加载 所以我尝试添加加载通知 但没有显示 不过 我可以在常规线程中显示进度对话框 为什么这个对话框没有显示 public void onCreate Bund
  • 是否可以扩展 woocommerce 产品休息端点?

    有没有办法扩展 woocommerce Rest api 中的产品对象 wp json wc v3 products 以非破坏性的方式 因此使用该端点的插件不会中断 我目前尝试创建自己的休息端点来复制该对象 但现在缺少大量数据 我也尝试过类
  • 如何使用 Amazon API 轻松恢复购买?

    我正在尝试像 iOS 一样恢复购买 但我不知道如何使用 Amazon API 轻松恢复 IAP 权利购买 如果我向PurchasingManager 它返回一个PurchaseResponse 但是那个PurchaseResponse如果已
  • ar.js 中的事件监听器

    我正在开发一个涉及 ar js 的项目 该项目显示 3D 对象和文本 以在移动设备和笔记本电脑上教孩子们字母表 我试图添加一个事件侦听器作为额外的内容 以使孩子们进行更多互动 我的目标是单击 触摸显示的模型 它将放大或改变颜色或旋转 附件中
  • 如何在 django 模型字段上存储多个值

    我有一个模型 将重复的训练存储在我的健身房中 DAYS OF WEEK 0 Monday 1 Tuesday 2 Wednesday 3 Thursday 4 Friday 5 Saturday 6 Sunday class Recurri
  • 如何使用Python图像库(PIL)突出显示图像的一部分?

    如何突出显示图像的一部分 位置定义为 4 个数字的元组 你可以想象它就像我有电脑主板的图像 我需要突出显示例如CPU插槽所在的部分 请注意 对于 Python 3 您需要使用pillow https pypi org project Pil