Python 3.x 如何将字符串转换为numpy数组并显示图像

Python 3.x 如何将字符串转换为numpy数组并显示图像,python-3.x,numpy,opencv,numpy-ndarray,opencv-python,Python 3.x,Numpy,Opencv,Numpy Ndarray,Opencv Python,如何将带有3d数组的字符串转换为numpy数组并显示图像? 脚本: import numpy as np # client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # client.connect(('localhost', 6060)) cap = cv2.VideoCapture(0) while True: opt = input() ret, frame = cap.read() if opt

如何将带有3d数组的字符串转换为numpy数组并显示图像?

脚本:

import numpy as np

# client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# client.connect(('localhost', 6060))

cap = cv2.VideoCapture(0)

while True:
    opt = input()
    ret, frame = cap.read()

    if opt == 'x': break

    print(frame)
    # client.send(bytes(str(frame), 'utf-8'))
    print('done!')

frame = str(frame)
frame_ = np.array(frame)

cv2.imshow('frame', frame_)
cv2.waitKey(0)

cap.release()
cv2.destroyAllWindows()
  File "/Users/homepro/PycharmProject/Projects/Socket/videocallApp/client.py", line 22, in <module>
    cv2.imshow('frame', frame_)
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'
错误:

import numpy as np

# client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# client.connect(('localhost', 6060))

cap = cv2.VideoCapture(0)

while True:
    opt = input()
    ret, frame = cap.read()

    if opt == 'x': break

    print(frame)
    # client.send(bytes(str(frame), 'utf-8'))
    print('done!')

frame = str(frame)
frame_ = np.array(frame)

cv2.imshow('frame', frame_)
cv2.waitKey(0)

cap.release()
cv2.destroyAllWindows()
  File "/Users/homepro/PycharmProject/Projects/Socket/videocallApp/client.py", line 22, in <module>
    cv2.imshow('frame', frame_)
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'
文件“/Users/homepro/PycharmProject/Projects/Socket/videocallApp/client.py”,第22行,在
cv2.imshow(“帧”,帧)
cv2.error:OpenCV(4.5.2):-1:函数“imshow”中的错误(-5:错误参数)
>重载解析失败:
>-不支持mat数据类型=19
>-参数“mat”的预期Ptr
>-参数“mat”的预期Ptr
回溯(最近一次呼叫最后一次): 文件“/Users/homepro/PycharmProject/Projects/Socket/videocallApp/client.py”,第22行,在 cv2.imshow(“帧”,帧) cv2.error:OpenCV(4.5.2):-1:函数“imshow”中的错误(-5:错误参数)

重载解析失败:

  • 不支持mat数据类型=19
  • 参数“mat”的预期Ptr
  • 参数“mat”的预期Ptr

不是转换为字符串,而是转换为字节数组:
frame=frame.tobytes()
,转换回的形式如下:
frame\u=(np.frombuffer(以字节为单位,np.uint8)。重塑([height,width,3])
。我认为您可以使用
frame.decode(“utf-8”)
将字节数组转换为字符串,使用
frame.decode(“utf-8”)
将字符串转换为字节。我仍然会得到错误:frame\uU9=np.frombuffer(frameBin,np.uint8)。重塑([720,1280,3])值错误:无法将大小为2764965的数组重塑为形状(7201280,3)以字节为单位的数组大小应为
720*1280*3
=
2764800
。您有165个额外字节。我不知道为什么。我甚至在降低分辨率后也会出现错误:File“/Users/homepro/PycharmProject/Projects/Socket/videocallApp/client.py”,第28行,在frame_uu=np.frombuffer(frameBin,np.uint8)中。重塑([480,640,3])值错误:无法将大小为921765的数组重塑为形状(480640,3)
480*640*3
=
921600
,您有
921765
。如果你不发布更新的代码,我帮不了你。你知道你可以编辑你的问题,对吗?