裁剪大图像周围的空白区域
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)
【讨论】:
以上是关于裁剪大图像周围的空白区域的主要内容,如果未能解决你的问题,请参考以下文章