python - 显示来自通过套接字发送的numpy Array的图像

标签 python arrays numpy sockets cv2

我正在尝试制作一个流应用程序,该应用程序将获取特定窗口的屏幕截图并将其发送到服务器,然后服务器显示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/

相关文章:

python - Set 和 set 有区别吗?

javascript - Q.allSettled 在将任何内容推送到数组之前执行

c - 如何使用指针交换数组

java - 全局 float 组值不传递类

python - pip 在 Mac OS X Mavericks (10.9) 上引发 stdio.h not found 错误

python - 获取每一行中第一次出现的索引

python - 关于 Python 可执行文件中缺少 GTK 图标的警告

python - 在 Python 中缩小和合并 PDF

python - 从技术上讲,numpy.mgrid 是什么?

python - 如何使用conda安装考拉?