<p>您可以使用<strong>Redis</strong>来完成此操作。它是一个非常快速的内存数据结构服务器,可以为字符串、整数、哈希、列表、队列、集合、有序集、图像提供服务。它是免费和简单的安装在<strong>macOS</strong>,<strong>Linux</strong>和<strong>Windows</strong>上。在</p>
<P>也可以使用^ {CD1>}、Python、PHP、C/C++或其他许多语言读写ReDIS值。此外,您可以通过网络或世界各地的服务器进行读写操作,只需更改初始连接中的IP地址即可。所以,你可以在Linux下的树莓Pixon上获取图片,并在C/C++环境下在Windows下存储并在PC上处理。在</p>
<p>然后,您只需将图像放入名为<code>Camera1</code>或{<cd3>}的<strong>Redis</strong>,或者将它们放入一个已排序的散列中,这样就可以按帧号对图像进行缓冲。您还可以给图像(或其他数据结构)一个<em>“生存时间”</em>,这样您的RAM不会被填满。在</p>
<p>下面是您为使用Redis而重写的代码的要点。暂时没有严重的错误检查或灵活性。一切正常。在</p>
<p>以下是<code>read_cam.py</code>:</p>
<pre><code>#!/usr/bin/env python3
import cv2
import struct
import redis
import numpy as np
def toRedis(r,a,n):
"""Store given Numpy array 'a' in Redis under key 'n'"""
h, w = a.shape[:2]
shape = struct.pack('>II',h,w)
encoded = shape + a.tobytes()
# Store encoded data in Redis
r.set(n,encoded)
return
if __name__ == '__main__':
# Redis connection
r = redis.Redis(host='localhost', port=6379, db=0)
cam = cv2.VideoCapture(0)
key = 0
while key != 27:
ret, img = cam.read()
cv2.imshow('img', img)
key = cv2.waitKey(1) & 0xFF
toRedis(r, img, 'image')
</code></pre>
<hr/>
<p>这里是<code>read_globvar.py</code>:</p>
^{pr2}$
<hr/>
<p>请注意,您可以在JSON中同样地存储图像的高度和宽度,并将其存储在Redis中,而不是我所做的<code>struct.pack</code>和{<cd7>}中。在</p>
<p>另外请注意,您可以在内存中将图像编码为JPEG并将其存储在Redis中(而不是Numpy数组),这样可以节省内存和网络带宽。在</p>
<p>不管怎样,使用Redis的概念都是一样的。在</p>