在PIL中覆盖图像而不是打开新窗口

时间:2015-09-08 17:08:36

标签: python opencv python-imaging-library

我正在通过Python 2.7中的简单套接字程序将Raspberry Pi中的JPEG图像流发送到我的MBP。

当我从MBP上的流中读取图像时,它会在预览中打开,并为每个单独的图像打开一个新的预览窗口。我有一个大约2/3的fps,显然每秒2/3个新窗口是不可能的。

如何只打开一个预览窗口并简单地覆盖显示的图像? OpenCV会是最好的方式吗?如果是这样,我不确定如何。

以下是我阅读流并显示图像的方法:

image_len = struct.unpack('<L', connection.read(struct.calcsize('<L')))[0]
    if not image_len:
        break
    image_stream = io.BytesIO()
    image_stream.write(connection.read(image_len))
    image_stream.seek(0)
    image = Image.open(image_stream)
    image.show()

1 个答案:

答案 0 :(得分:1)

OS X Preview似乎每隔一段时间自动重新加载打开的图像(总是在窗口获得焦点时),但Image.show每次使用时都会保存一个新的临时文件。我建议将每个新帧保存到同一个文件中,然后将subprocess.call与OS X open命令一起使用。

据说,the documentation注意到Image.show主要用于调试目的。对于具有超过几个FPS的视频,您可能需要其他内容。一种解决方案是使用WebSockets的HTML界面,可能使用类似AutoBahn的内容。