将numpy数组作为jpeg写入缓冲区

将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格式的资料,但在我的例子中,我想将数据写入内存中的缓冲区,我不想将

我有一个返回np.uin8数组流的程序。我现在想把这些广播到由那台计算机主持的网站上

我计划通过在文档中插入代码来实现这一点,方法是用
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系统,程序的这一部分将是发布者,广播图像。无论如何,我有一个解决办法。