gpt4 book ai didi

python - 更改为/自字符串/字节后编码/解码图像数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:33 24 4
gpt4 key购买 nike

最终目标是创建一个在 Raspberry Pi 上运行的程序,该程序可以将视频数据流式传输到远程客户端。为此,我(相信)我需要将帧数据更改为原始字节,以便它们通过套接字发送。在将其部署到现实世界之前,我只是简单地检查以确保我可以进行字节之间的转换。我确实得到了输出,它正在实时从相机读取数据,但它的显示方式是 1 像素宽的垂直左对齐线。 (当在 OpenCV 窗口中使用默认的全屏按钮时,它会增加到大约 5 个像素宽。)同样只是为了澄清一下,tostring() 函数显然将给定的数据转换为原始字节而不是字符串?在检查中,Python 说新变量是字节。

我之前的尝试主要集中在获取原始图像数据并尝试对其进行编码和解码,但我遇到了一个错误。我认为我走在正确的轨道上,但这是一个障碍。

import cv2
import numpy as np

vid = cv2.VideoCapture(0)

while True:
empty, frame = vid.read()

frameString = frame.tostring()

# Intermediary socket stuffs.

newFrame = np.frombuffer(frameString)

cv2.imshow("s", newFrame)

if cv2.waitKey(1) & 0xFF == ord('q'):
break

vid.release()

考虑到这一切都是通过 Numpy 进行的,我希望在转换的两端都能得到相同的结果,但出了点问题,我什至不确定从哪里开始寻找。(标准和全屏屏幕截图:https://imgur.com/a/BIPxr50)

最佳答案

您可以使用cv2.imencode() 对帧进行编码,然后将其转换为字符串。从那里你可以通过你的套接字发送它。在接收端,您可以使用 np.fromString()cv2.imdecode() 对其进行解码。

import cv2
import numpy as np

vid = cv2.VideoCapture(0)

while True:
if vid.isOpened():
empty, frame = vid.read()
data = cv2.imencode('.jpg', frame)[1].tostring()

# Intermediary socket stuffs

nparr = np.fromstring(data, np.uint8)
newFrame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
cv2.imshow("s", newFrame)

if cv2.waitKey(1) & 0xFF == ord('q'):
break

vid.release()

关于python - 更改为/自字符串/字节后编码/解码图像数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56011435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com