gpt4 book ai didi

python - 使用python替换图像中的白色行

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:55 25 4
gpt4 key购买 nike

我正在尝试修剪图像的一部分,其中一整行图像除了白色外没有任何其他颜色。

我尝试使用 matplot 库

  1. 将图像转换为矩阵并查看是否 (r,g,b) = (0,0,0) 或 (1,1,1),如果每个 (r,g,b) ) 排在上面的种类

    矩阵看起来像 [ [ [r,g,b], [r,g,b].....] ],...., [ [r,g,b], [r,g,b ] ] ] ]

我达到了我的要求,但我正在为大约 500 张图像运行它,大约需要 30 分钟。我能以更好的方式做到这一点吗?

actual image

所需的图片应该是这样的

required output

编辑-1: 尝试使用 wand 包中的 trim 方法

with wand_img(filename=path) as i:
# i.trim(color=Color('white'))
# i.trim(color=Color('white'))
i.trim()
i.trim()
i.save(filename='output.png')

但不适用于以下类型的 images

最佳答案

您可以使用 ImageMagick,它安装在大多数 Linux 发行版上,并且适用于 macOS 和 Windows。

要修剪一张图像,启动终端(或 Windows 上的命令提示符)并运行:

magick input.png -fuzz 20% -trim result.png

这会给你这个 - 虽然我添加了一个黑色边框所以你可以看出它的范围:

enter image description here

如果您有很多事情要做,您可以像这样使用 GNU Parallel 并行处理它们:

parallel -X magick mogrify -trim ::: *png

我复制了 1,000 份您的图片,并在 MacBook Pro 上用了 4 秒完成了所有操作。

如果您没有 GNU Parallel,您可以像这样在 12 秒内完成 1,000 张图像:

magick mogrify -trim *png

如果你想用 Python 来做,你可以尝试这样的事情:

#!/usr/bin/env python3

from PIL import Image, ImageChops

# Load image and convert to greyscale
im = Image.open('image.png').convert('L')

# Invert image and find bounding box
bbox = ImageChops.invert(im).getbbox()

# Debug
print(*bbox)

# Crop and save
result = im.crop(bbox)
result.save('result.png')

它提供与 ImageMagick 版本相同的输出。我建议您使用线程工具并行执行大量操作以获得最佳性能。

顺序版本处理 1,000 张图像需要 65 秒,多处理版本处理 1,000 张图像需要 14 秒。

关于python - 使用python替换图像中的白色行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54446388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com