将 numpy 数组以 jpeg 格式写入缓冲区

巴勃罗

我有一个返回 np.uin8 数组流的程序。我现在想将这些广播到由该计算机托管的网站。

我计划通过注入的代码来执行此通过更换在线文档camera.start_recording(output, format='mjpeg')output.write(<numpy_array_but_jpeg>)文档start_recording说明如果该write()方法存在,它将以请求的格式将数据写入该缓冲区。我可以在网上找到很多关于如何将 a 保存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])

允许您将数组写入内存缓冲区。

这里的这个例子展示了我所说的基本实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将流写入缓冲区对象

将文件写入缓冲区

如何将低精度数字(2-10位)写入数组缓冲区/ blob?

如何在不保存图像的情况下将Numpy数组图像转换为JPEG?

从具有不同数据类型的缓冲区中读取numpy数组而不复制数组

将数组编组到像素缓冲区的常量缓冲区中,无法按预期工作

MPI_Bcast,将数组缓冲区广播到接收缓冲区中的特定位置

将二进制数据写入缓冲区

将缓冲区写入Java通道:是否是线程安全的?

为什么没有将缓冲区写入FileChannel

将byte []写入OutputStream时添加缓冲区

如何将64位BigInt写入缓冲区?

nodejs / fs:将tar写入内存缓冲区

无法将大缓冲区写入EEPROM

将 depthMap 缓冲区写入文件 (Swift)

为什么 ReadFile 函数将垃圾写入缓冲区?

如何在不先将文件另存为png或jpeg的情况下将numpy数组传递给openCV?

往返于ModernGL缓冲区的numpy数组(使用cv2打开并保存)

将C格式传递到nodejs缓冲区

将NumPy数组追加到NumPy数组

将NumPy数组追加到NumPy数组

缓冲区数组操作

如何将缓冲区stringify从node.js转换为python中的数组

为什么将4096个元素用于char数组缓冲区?

将3个值的数组包装在缓冲区中

如何最好地将byte []数组转换为字符串缓冲区

将字符串缓冲区传递到数组到android中的列表

如何将两个数组缓冲区合并为一个?

将数组缓冲区转换为字符串-超出最大调用堆栈大小