如何将图像转换为字节数组?

时间:2020-01-22 19:33:05

标签: python image numpy opencv

我想在套接字上创建视频流,但是我无法将图像转换为字节数组。 为什么我不能将图像形式的相机转换为字节数组?

CHUNK=1024 lnF = 640*480*3    
wvs = WebcamVideoStream(0).start()    
while True: for x in range(1):
        try:
            frame = wvs.read()
            cv2_im = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            # cv2.imshow('frame',cv2_im)
            # if cv2.waitKey(1) & 0xFF == ord('q'):
            #     break
            frame = cv2.resize(frame, (640, 480))
            # print("frame :", frame)
            frame = np.array(frame, dtype = np.uint8).reshape(1, lnF)
            # print("frame :",frame)
            jpg = bytearray(frame)
            # print("jpg_as_text", jpg_as_text)
            # print("ACCEP")
        except Exception as e:
            print(e)

2 个答案:

答案 0 :(得分:1)

cv2图像存储为numpy.ndarray。要获得numpy.ndarray的字节表示,您可以使用numpy.ndarray.tobytes方法来转换图像。在您的代码中,它看起来像这样:

jpg = frame.tobytes()

使用.tobytes方法时,字节的长度实际上要比pickle.dumps方法要小一些,并且要快得多。

答案 1 :(得分:0)

尝试一下:

 import pickle

 frame = wvs.read()
 cv2_im = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
 frame = cv2.resize(frame, (640, 480))
 frame = np.array(frame, dtype = np.uint8).reshape(1, lnF)

 # packing:

 pickled = pickle.dumps(frame)
 byte_array_pickle = str.encode(pickled)

#unpacking

unicode_pickle = incoming_data.decode()
original_image = pickle.loads(unicode_pickle)