通过插座读取Python中的OpenCV图像

reading an opencv image in python through a socket

本文关键字:中的 OpenCV 图像 Python 读取 插座      更新时间:2023-10-16

我正在尝试读取从C 发送的Python插座中的OpenCV映像。

我能够将图像读取到另一个C 程序或VB程序中并构建图像,但是使用Python,我不明白发生了什么。

我发送mat.data的发送代码:

char *start_s = "<S><size>43434234<cols>64<rows>64<SE>";//plus I send the image size, cols, rows, which varies, not like the static char string shown
char *end_e = "<E>";
cv::Mat image_send = some_mat;
iResult = send( ConnectSocket, start_s, (int)strlen(start_s), 0 );
iResult = send( ConnectSocket, (const char *) image_send.data, i_buffer_size, 0 );
iResult = send( ConnectSocket, end_e, (int)strlen(end_e), 0 );

这是我在Python上尝试过的,但还没有任何成功。image_cols和image_rows是从插座中过滤的,在此未显示,并且仅在C 垫中image_mat.data在我试图将其放入图像中的插座中。

data = conn.recv(4757560)
        if(i_Read_Image == 2) & (image_cols != 0) & (image_rows != 0):
            print ("Entering")
            #print(data)
            data2 = np.fromstring(data, dtype='uint8')
            img_np = cv2.imdecode(data2,cv2.IMREAD_COLOR )
            cv2.imshow('image',img_np)
            cv2.waitKey(0)
            #Also tried this
            #img = Image.new('RGB', (image_cols, image_rows))
            #img.putdata(data)
        #img5 = np.reshape(data2,(image_rows,image_cols))
        i_Read_Image = 0

在评论的帮助下,我能够得到一个工作的答案。原始图像在单个阵列RGB中,需要重塑并将其放入" RGB"图像中,可以在一行中完成:

img = Image.fromarray(data2.reshape(image_rows,image_cols,3), 'RGB')

以及从插座读取OpenCV数据阵列时:

data = conn.recv(567667)
if(i_Read_Image == 2) & (image_cols != 0) & (image_rows != 0):
    data2 = np.fromstring(data, dtype='uint8')
    img = Image.fromarray(data2.reshape(image_rows,image_cols,3), 'RGB')
    img.show()