如何解决显示通过套接字发送的numpy Array中的图像
我正在尝试制作一个流应用程序,该应用程序将获取特定窗口的屏幕截图并将其发送到服务器,然后服务器显示img。
捕获是通过( WORKS )
完成的frame = np.array(ImageGrab.grab(bbox=win32gui.GetWindowRect(window)))
帧发送:(工作)
dp = pickle.dumps(frame)
to_send = bytes(f"{len(dp):<{HEADER}}",FORMAT) + bytes(FRAME_MSG,FORMAT) + dp
client.send(to_send)
接收:(工作)
def receive_msg(msg_len,conn,buffer):
msg = bytearray()
while(len(msg) < msg_len):
msg += conn.recv(buffer)
# msg.append(conn.recv(buffer))
return msg
msg = receive_msg(msg_len,1024)
arr = pickle.loads(msg)
显示:(不起作用)
cv2.imshow('window',cv2.cvtColor(arr,cv2.COLOR_BGR2RGB))
我尝试显示的选项:
-------
image = cv2.imdecode(arr,cv2.COLOR_BGR2RGB)
cv2.imshow('URL2Image',image)
-------
cv2.imshow('window',arr)
-------
img = Image.fromarray(arr,"RGB")
img.show()
-------
通过发送示例numpy数组数据,已测试了我标记为工作的零件。
-编辑---
结果证明,cv2.imshow()
需要在下面的某个地方调用cv2.waitKey()
才能正常工作。
感谢所有尝试提供帮助的人。
解决方法
您的阵列形状是什么? 确保不仅将其转换为1d数组,而且还要转换为2d或3d数组(取决于它是灰度还是彩色)。
您必须以某种方式指定期望数组的x和y(可能还有z)维-在消息中或在接收方的代码中硬编码。
当然,将它们作为参数发送到消息中更好,但是我建议为了调试,首先对尺寸进行硬编码以将其转换为正确的2d / 3d形状。如果可行,那就是问题所在。然后找出如何将其与图像本身一起作为消息发送。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。