我正在尝试制作一个流应用程序,该应用程序将获取特定窗口的屏幕截图并将其发送到服务器,然后服务器显示img。
捕获是通过( WORKS )完成的
frame = np.array(ImageGrab.grab(bbox=win32gui.GetWindowRect(window)))
框架发送:( WORKS )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, conn, 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形状。如果可行,那就是问题所在。然后弄清楚如何将其与图像本身一起作为消息发送。
关于python - 显示来自通过套接字发送的numpy Array的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64776817/