我使用Python 3和OpenCV来读取视频,并通过套接字将帧发送到基于Node.js的网页。
让我们想象一下这样的情况:
cap = cv2.VideoCapture(video_path)
while cap.isOpened():
ret, frame = cap.read()
send(frame)
在send()
函数中,在实际发送之前,我将帧传递给normalize()
函数,将其转换为套接字IO可交付的格式。normalize()
如下所示:
def normalize(frame):
d = frame.flatten()
s = d.tostring()
b = b64encode(s)
return b.decode('ascii')
在Node.js应用程序中,我收到了如下信息:
如何将此编码字符串转换为普通视频,甚至图像?
- 谢谢-谢谢
1条答案
按热度按时间xmq68pz91#
要对图像进行编码,请使用
cv2.imencode()
。然后,您可以将该缓冲区写入一个base 64字符串,然后直接用HTML显示该缓冲区,或者对它执行任何您希望的操作。下面是一个基本的例子。首先,Python:
这将给予base 64格式的编码图像。如果将
data:image/png;base64,
添加到该字符串前面,则可以将该字符串用作图像的src
,从而直接使用HTML显示该字符串返回的图像。比如说...
有了这个随机的图像,我的
img_src
变成:然后在一个简单的HTML文件中,使用以下代码作为图像标记的源代码:
你应该能看到图像。
您也可以使用此格式将它们直接保存为节点服务器上的影像。例如,您可以使用
{encoding: 'base64'}
指定选项对象,将此b64字串直接写入影像档。例如,从this tutorial:当然,如果你使用节点中的其他库来处理图像,你需要使用该库中的一些函数来解码图像。从b64转换为bytes可能并不太难,但是你需要将这些bytes解码为你在服务器端使用的任何库中的图像。