Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何查看大图像的实时拼接?_Python_Image Processing_Deepzoom_Openseadragon_Seadragon - Fatal编程技术网

Python 如何查看大图像的实时拼接?

Python 如何查看大图像的实时拼接?,python,image-processing,deepzoom,openseadragon,seadragon,Python,Image Processing,Deepzoom,Openseadragon,Seadragon,我已经建立了一个代码,将缝100X100图像约。我想看到这个缝合过程中的实时。我正在使用pyvips创建大图像。我正在以.DZI格式保存最终图像,因为它将占用很少的内存来显示。 下面的代码只是为了测试目的而复制的 这里的cp~/pics/k2.jpg将从pics文件夹复制k2.jpg图像1600次,因此根据您的图像名称和位置进行更改 我想实时显示这个过程。现在,在创建最终的马赛克图像后,我能够显示。只是一个想法,我正在考虑制作一个大图像并显示它,然后插入更小的图像。我不知道该怎么做。我很困惑,因

我已经建立了一个代码,将缝100X100图像约。我想看到这个缝合过程中的实时。我正在使用pyvips创建大图像。我正在以.DZI格式保存最终图像,因为它将占用很少的内存来显示。 下面的代码只是为了测试目的而复制的

这里的
cp~/pics/k2.jpg
将从pics文件夹复制k2.jpg图像1600次,因此根据您的图像名称和位置进行更改


我想实时显示这个过程。现在,在创建最终的马赛克图像后,我能够显示。只是一个想法,我正在考虑制作一个大图像并显示它,然后插入更小的图像。我不知道该怎么做。我很困惑,因为我们还必须制作金字塔结构。所以,如果我们首先创建大图像,我们必须用新图像替换每个级别的图像。创建.DZI映像非常昂贵,所以我不想在每个运行循环中创建它。替换图像可能是一个解决方案。各位有什么建议吗?

我想您面临两个挑战:如何在服务器上保持金字塔的最新状态,以及如何在客户端保持金字塔的最新状态。蛮力方法是不断在服务器上重建DZI,并定期刷新客户端上的磁贴(以便重新加载)。对于类似的情况,您还需要每次向平铺URL添加一个缓存半身像,否则浏览器会认为它应该只使用其本地副本(没有意识到它已经更新)。当然,这种蛮力方法可能太慢了(尽管尝试起来可能很有趣!)

为了更精细一点,您需要制作一个与子图像精确对齐的金字塔。这样,当您更改单个子图像时,很明显需要更新哪些分幅。如果您有正方形子图像,并且使用的平铺大小是子图像大小的偶数部分,则可以使用DZI执行此操作。也没有瓷砖重叠。当然,您必须构建自己的DZI构造函数,因为现有的DZI构造函数不能简单地替换单个tile。如果您知道在服务器上更改了哪些磁贴,那么可以将其与客户端通信(通过定期轮询或使用类似web套接字的方式),然后仅刷新这些磁贴(同样是通过缓存破坏)


您可以尝试的另一个解决方案是,从本质上来说,不尝试金字塔,而只是一组具有合理分辨率的平铺,以允许用户在场景周围平移。这将大大简化服务器上的金字塔更新,因为您需要做的只是为每个子映像替换一个映像。这可以在客户端上以自定义(非OpenSeadragon)方式加载和显示,或者您甚至可以使用OpenSeadragon的多图像功能来利用其平移和缩放功能,如下所示:(每个相册封面都是它自己的独立图像对象)。

您希望用户能够在创建时放大它吗?一种选择是只显示概览,而不允许它们放大。在这种情况下,你只需要替换一个图像,它可以跳过DZI和OpenSeadragon,直到它真正完成。是的,这就是我现在正在做的。可以实时查看低分辨率图像,但无法缩放,在完成创建过程后,我在上一张中创建了.dzi图像。有没有办法实时放大它?我无法将整个图像加载到RAM中,因为它大约有5-10GB的容量。谢谢@iangilman。我理解这个概念,但由于我是新手,我不知道从哪里开始。有什么例子或教程吗?我不知道这方面有什么教程,但可能有!你认为你会朝哪个方向发展?现在,我只是用调整大小的图像在背景中显示和平铺全分辨率图像。我想了解.dzi图像,了解它是如何创建和索引的。如果我知道每个级别上每个图像的索引,我将能够替换这些图像,这可能对我显示全分辨率图像有用。酷。我在这里补充了一些想法:
#!/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