我已经构建了一个代码,可以缝合大约 100X100 图像。我想实时查看这个缝合过程。我正在使用 pyvips 创建大图像。我将最终图像保存为 .DZI 格式,因为它会占用更少的内存来显示。复制以下代码仅用于测试目的https://github.com/jcupitt/pyvips/issues/43。
#!/usr/bin/env python
import sys
import pyvips
# overlap joins by this many pixels
H_OVERLAP = 100
V_OVERLAP = 100
# number of images in mosaic
ACROSS = 40
DOWN = 40
if len(sys.argv) < 2 + ACROSS * DOWN:
print 'usage: %s output-image input1 input2 ..'
sys.exit(1)
def join_left_right(filenames):
images = [pyvips.Image.new_from_file(filename) for filename in filenames]
row = images[0]
for image in images[1:]:
row = row.merge(image, 'horizontal', H_OVERLAP - row.width, 0)
return row
def join_top_bottom(rows):
image = rows[0]
for row in rows[1:]:
image = image.merge(row, 'vertical', 0, V_OVERLAP - image.height)
return image
rows = []
for y in range(0, DOWN):
start = 2 + y * ACROSS
end = start + ACROSS
rows.append(join_left_right(sys.argv[start:end]))
image = join_top_bottom(rows)
image.write_to_file(sys.argv[1])
要运行此代码:
$ export VIPS_DISC_THRESHOLD=100
$ export VIPS_PROGRESS=1
$ export VIPS_CONCURRENCY=1
$ mkdir sample
$ for i in {1..1600}; do cp ~/pics/k2.jpg sample/$i.jpg; done
$ time ./mergeup.py x.dz sample/*.jpg
这里cp ~/pics/k2.jpg
将从 pics 文件夹中复制 k2.jpg 图像 1600 次,因此请根据您的图像名称和位置进行更改。
我想实时显示这个过程。现在,在创建最终的马赛克图像后,我可以显示了。只是一个想法,我正在考虑制作大图像并显示它,然后插入较小的图像。我不知道,它是怎么做到的。我很困惑,因为我们还必须制作金字塔结构。所以如果我们首先创建大图像,我们必须用新图像替换每个级别的图像。创建 .DZI 图像很昂贵,所以我不想在每个运行循环中都创建它。替换图像可能是一种解决方案。大家有什么建议吗??