Я хочу отправить изображение, которое было импортировано opencv imread, на другой компьютер через сокет. Но полученные данные и отправленные данные не равны.
Я преобразовал данные массива numpy, которые я получил с помощью imread, и преобразовал их в байтовый массив для отправки через сокет. И затем я преобразовал массив байтов, который был получен на другом конце, обратно в массив NumPy. Но я не могу просмотреть изображение из полученных данных.
Это фрагмент кода в конце отправителя
im = cv2.imread('view.jpg')
stringimage = np.array_str(im)
byteimage = str.encode(stringimage)
sock.sendto(byteimage,("127.0.0.1",5002))
Это фрагмент кода в конце получателя
byteimage,addr = sock.recvfrom(1024)
decoded = bytes.decode(byteimage)
backstring = np.array(decoded)
cv2.imshow('RealSense', backstring)
cv2.waitKey(0)
Я получил эту ошибку
Ошибка типа: mat data type = 19 не поддерживается
для этой строки кода
cv2.imshow('RealSense', backstring)
Обновление
После получения предложений ниже и обращения к некоторым другим материалам я пришел к решению, которое работает для моего сценария.
Сторона отправителей изображения
#color_image is my opencv image
retval, data = cv2.imencode('.jpg', color_image, ENCODE_PARAMS)
b64_bytes = base64.b64encode(data)
b64_string = b64_bytes.decode()
sock.sendto(str.encode(b64_string), ("127.0.0.1", 5002))
Сторона получателя изображения
data, addr = sock.recvfrom(60000)
img = imread(io.BytesIO(base64.b64decode(data)))
Скажите, пожалуйста, есть ли плохое кодирование в моем решении