将numpy数组作为jpeg写入缓冲区
我有一个返回np.uin8数组流的程序。我现在想把这些广播到由那台计算机主持的网站上 我计划通过在文档中插入代码来实现这一点,方法是用将numpy数组作为jpeg写入缓冲区,numpy,raspberry-pi,video-streaming,streaming,mjpeg,Numpy,Raspberry Pi,Video Streaming,Streaming,Mjpeg,我有一个返回np.uin8数组流的程序。我现在想把这些广播到由那台计算机主持的网站上 我计划通过在文档中插入代码来实现这一点,方法是用output.write()替换行camera.start\u recording(output,format='mjpeg')。start\u recording文档说明,如果write()方法存在,它将以请求的格式将数据写入该缓冲区。 我可以在网上找到很多指导如何将np.uint8保存为jpeg格式的资料,但在我的例子中,我想将数据写入内存中的缓冲区,我不想将
output.write()替换行camera.start\u recording(output,format='mjpeg')
。start\u recording
文档说明,如果write()
方法存在,它将以请求的格式将数据写入该缓冲区。
我可以在网上找到很多指导如何将np.uint8
保存为jpeg格式的资料,但在我的例子中,我想将数据写入内存中的缓冲区,我不想将图像保存到文件中,然后将该文件读入缓冲区
不幸的是,在流的前面更改np.uint8
的输出格式不是一个选项
谢谢你的帮助。为了简单起见,我复制了下面的重要代码
class StreamingOutput(object):
def __init__(self):
self.frame = None
self.buffer = io.BytesIO()
self.condition = Condition()
def write(self, buf):
if buf.startswith(b'\xff\xd8'):
# New frame, copy the existing buffer's content and notify all
# clients it's available
self.buffer.truncate()
with self.condition:
self.frame = self.buffer.getvalue()
self.condition.notify_all()
self.buffer.seek(0)
return self.buffer.write(buf)
with picamera.PiCamera(resolution='640x480', framerate=24) as camera:
output = StreamingOutput()
camera.start_recording(output, format='mjpeg')
OpenCV有这样的函数
retval,buf=cv.imencode(ext,img[,params])
用于将数组写入内存缓冲区
这里显示了我所说内容的基本实现。您的问题很难理解。你想“向网站广播”?我计划使用一个PubSub系统,程序的这一部分将是发布者,广播图像。无论如何,我有一个解决办法。