裁剪大图像周围的空白区域

Posted

技术标签:

【中文标题】裁剪大图像周围的空白区域【英文标题】:cropping white space around a large image 【发布时间】:2018-11-06 20:54:41 【问题描述】:

我正在尝试。 2000 像素 X 32000 像素。我尝试了 convert trim 但失败了,也尝试了 mogrify 也失败了。我尝试安装带有其他错误和警告的 R magick 库。此外,我尝试了 PIL,但它没有安装在我的 Python 2.7 上。无论如何,有一个简单的解决方案可以裁剪我的图像周围的空白区域。任何帮助都深表感谢。 我有 100 个这样的图像要修剪。 这是我的转换命令:

convert A1.png -fuzz 0% -trim +repage A_N.png'

【问题讨论】:

您的图像有噪点吗?是扫描吗?您是否尝试添加较大的 -fuzz 因子? 我的图像是使用 R 的图像功能生成的黑白 heatmap.png。至少据我所知,我认为它没有任何噪音。 试试mogrify -fuzz 50% -trim image.png mogrify -fuzz 50% -trim A_N.png mogrify: ../../magick/quantum.c:216: DestroyQuantumInfo: 断言 `quantum_info != (QuantumInfo *) NULL' 失败。中止(核心转储) convert指定输入和输出,mogrify指定输入,一般"in situ"修改。 【参考方案1】:

我在 R 中找到了解决问题的方法。我在 plot/image 函数之前添加了这一行 par(mar=c(0,0,0,0)) ,它成功了并生成了一个没有任何边距的图像为了我。 这可能不是我在这里要问的,但它比我想到的在完成后裁剪图像周围的空白区域更好的解决方案。这是一个简单的解决方案,在绘制绘图之前消除了白边问题。 谢谢大家的建议和帮助。如果你不同意这个解决方案,请告诉我,我很乐意为他们工作。

【讨论】:

【参考方案2】:

有点晚了,但我刚刚写了这个图像裁剪器:

# Load packages
import matplotlib.pyplot as plt
import numpy as np
import glob

# List all logo files
path = r"K:\Folder/"
files = [f for f in glob.glob(path + "*logo.png", recursive=True)]

# Loop!
for file in files:
    # Load image
    img=plt.imread(file,0)

    # Start from top down
    found_white_row = True
    row = 0
    while found_white_row:
        check = True
        for layer in range(img.shape[2]):
            check = ((img[row,:,layer] == 255).all()) & check
        if check:
            row += 1
            if row > img.shape[0]:
                found_white_row = False
        else: 
            found_white_row = False

    img = img[row:,:,:]

    # Start from bottom up
    found_white_row = True
    row = img.shape[0]-1
    while found_white_row:
        check = True
        for layer in range(img.shape[2]):
            check = ((img[row,:,layer] == 255).all()) & check
        if check:
            row -= 1
            if row > img.shape[0]:
                found_white_row = False
        else: 
            found_white_row = False
            row -= 1

    img = img[:row,:,:]

    # Start from left to right
    found_white_row = True
    col = 0
    while found_white_row:
        check = True
        for layer in range(img.shape[2]):
            check = ((img[:,col,layer] == 255).all()) & check
        if check:
            col += 1
            if col > img.shape[1]:
                found_white_row = False
        else: 
            found_white_row = False

    img = img[:,col:,:]

    # Start from right to left
    found_white_row = True
    col = img.shape[1]-1
    while found_white_row:
        check = True
        for layer in range(img.shape[2]):
            check = ((img[:,col,layer] == 255).all()) & check
        if check:
            col -= 1
            if col > img.shape[1]:
                found_white_row = False
        else: 
            found_white_row = False
            col -= 1

    img = img[:,:col,:]

    # Save image
    plt.imsave(file.replace('logo.png','logo_cropped.png'),img)

【讨论】:

以上是关于裁剪大图像周围的空白区域的主要内容,如果未能解决你的问题,请参考以下文章

使用纵横比和空白区域裁剪图像

Python批量裁剪图形外围空白区域-续

Python批量裁剪图形外围空白区域

Chrome 设备模式下 Google 地图标记图标周围的空白区域

如何将大图像的部分裁剪到 ImageView

ImageView显示图像顶部和底部的空白区域