【发布时间】:2021-12-05 05:31:02
【问题描述】:
我正在尝试使用 OpenCV Python 处理来自 Unity3D WebCamTexture 图形格式(ARGB32)的图像。但我无法解释 Open CV 端的图像。图片全是蓝色(可能是ARGB)
try:
while(True):
data = sock.recv(480 * 640 * 4)
if(len(data) == 480 * 640 * 4):
image = numpy.fromstring(data, numpy.uint8).reshape( 480, 640, 4 )
#imageNoAlpha = image[:,:,0:2]
cv2.imshow('Image', image) #further do image processing
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
finally:
sock.close()
【问题讨论】:
-
您是否查看了字节以确保您得到您认为的内容?您绝对确定它是 ARGB,每个组件 8 位,没有标题?
-
是的,我得到的图形格式为 88 stackoverflow.com/questions/66706477/…,纹理的宽度和高度为 640 * 480,数据大小为 480*640*4 = 1228800(所以一切加起来)
-
当然数据是1,228,800;这就是你所要求的。 TCP 不是数据包协议,它是流协议。例如,如果另一端向您发送 4 个 640x480x1 的不同图像,您仍然会得到 1,228,800 字节。您需要转储第一组字节并确保它看起来像像素数据。
-
@TimRoberts 我检查过,但事实并非如此。我附上了输出图像。管道是红色的!!。
-
好的,让我指出您说“图像全是蓝色”。你的形象绝对不是“全蓝”。如果您一开始就发布了这张图片,我们可以立即识别出 BGR/RGB 反转。
标签: python python-3.x numpy opencv opencv-python