AO656 2021-05-20 17:12 采纳率: 76.9%
浏览 396
已采纳

如何使用python的socket传输numpy格式的图片?

我想用socket在两台机器之间传输图片

cilent

import socket
import cv2
from PIL import ImageGrab
import numpy as np
HOST = '127.0.0.1'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
img=ImageGrab.grab()
img_np=np.array(img)
frame=cv2.cvtColor(img_np,cv2.COLOR_BGR2RGB)
s.send(str(frame).encode("utf-8"))
cv2.destroyAllWindows()
s.close()

serve

import socket
import threading
import cv2
import numpy as np
HOST = '0.0.0.0'  # 本地localhost
PORT = 50007
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(5)
def tcp(a):
    while 1:
        data = a.recv(102400)
        data=data.decode("utf-8")
        data=np.array(data)
        if not data:
            break
        cv2.imshow('screen',data)
        cv2.waitKey(0)
    a.close()
while 1:
    conn, addr = s.accept()#接受连接
    print('Connected by', addr)
    t= threading.Thread(target=tcp,args=(conn,))#创建线程
    t.setDaemon(True)#设置为后台线程,这里默认是False,设置为True之后则主线程不用等待子线程
    t.start()
    continue

输出后两端的frame和data数据和类型都一模一样,但为什么用imshow时报

cv2.error: OpenCV(4.5.2) :-1: error: (-5:Bad argument) in function 'imshow'
> Overload resolution failed:
>  - mat data type = 19 is not supported
>  - Expected Ptr<cv::cuda::GpuMat> for argument 'mat'
>  - Expected Ptr<cv::UMat> for argument 'mat'

展开全部

  • 写回答

2条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-05-21 00:58
    关注

    str(cv2.cvtColor(img_np,cv2.COLOR_BGR2RGB)).encode("utf-8")无法序列化ndarray对象,建议题主尝试下面的方式序列化核反序列化,重点是要数据类型要对应。

    >>> a = np.array([1,2,3], dtype=np.int32)
    >>> b = a.tobytes()
    >>> np.fromstring(b, dtype=np.int32)
    array([1, 2, 3])
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    AO656 2021-05-21 09:27

    为什么我在服务端输出的格式和值都和另一边一样啊

    回复
    AO656 2021-05-21 09:40

    现在的程序是序列化时有问题还是反序列化时有问题,或者是都有问题

    回复
    天元浪子 回复 AO656 2021-05-21 09:42

    都有问题

    回复
    展开全部6条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部