从图像中删除所有空白区域

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从图像中删除所有空白区域相关的知识,希望对你有一定的参考价值。

我需要从图像中删除所有空白区域,但我不知道该怎么做..我正在使用修剪功能从边框修剪白色空格但图像中间仍然存在白色空格我附加了原始图像从中我想要删除空格

original Image

我的代码

from PIL import Image, ImageChops
import numpy


def trim(im):
    bg = Image.new(im.mode, im.size, im.getpixel((0, 0)))
    diff = ImageChops.difference(im, bg)
    diff = ImageChops.add(diff, diff, 2.0, -100)
    box = diff.getbbox()
    if box:
        im.crop(box).save("trim_pil.png")


im = Image.open("/home/einfochips/Documents/imagecomparsion/kroger_image_comparison/SnapshotImages/screenshot_Hide.png")
im = trim(im)

但是这段代码只能从边框中删除空格,我还需要从中间删除空格。请尽可能帮助,如果我在不同的PNG文件中获得所有五个图像,那将是非常好的。

答案

你可以通过for循环走很长的路

from PIL import Image, ImageChops

def getbox(im, color):
    bg = Image.new(im.mode, im.size, color)
    diff = ImageChops.difference(im, bg)
    diff = ImageChops.add(diff, diff, 2.0, -100)
    return diff.getbbox()

def split(im):
    retur = []
    emptyColor = im.getpixel((0, 0))
    box = getbox(im, emptyColor)
    width, height = im.size
    pixels = im.getdata()
    sub_start = 0
    sub_width = 0
    offset = box[1] * width
    for x in range(width):
        if pixels[x + offset] == emptyColor:
            if sub_width > 0:
                retur.append((sub_start, box[1], sub_width, box[3]))
                sub_width = 0
            sub_start = x + 1
        else:
            sub_width = x + 1
    if sub_width > 0:
        retur.append((sub_start, box[1], sub_width, box[3]))
    return retur

这样可以轻松地检索图像中的裁剪框,如下所示:

im = Image.open("/home/einfochips/Documents/imagecomparsion/kroger_image_comparison/SnapshotImages/screenshot_Hide.png")

for idx, box in enumerate(split(im)):
    im.crop(box).save("trim_{0}.png".format(idx))

如果您已经知道玩具想要提取的图像的大小,您可以使用

def split(im, box):
    retur = []
    pixels = im.getdata()
    emptyColor = pixels[0]
    width, height = im.size;
    y = 0;
    while y < height - box[3]:
        x = 0
        y_step = 1
        while x < width - box[2]:
            x_step = 1
            if pixels[y*width + x] != emptyColor:
                retur.append((x, y, box[2] + x, box[3] + y))
                y_step = box[3] + 1
                x_step = box[2] + 1
            x += x_step
        y += y_step
    return retur

在呼叫中添加另一个参数

for idx, box in enumerate(split(im, (0, 0, 365, 150))):
    im.crop(box).save("trim_{0}.png".format(idx))

以上是关于从图像中删除所有空白区域的主要内容,如果未能解决你的问题,请参考以下文章

如何从 OpenCV 中的图像中删除空格?

访问中的空白区域后如何删除所有内容

text 从整个df中删除空白区域

php 从选项页面上的自定义字段中删除空白区域

php 从选项页面上的自定义字段中删除空白区域

Fragment 工具栏上方奇怪的空白区域。如何解决?