python和c 之間的資料傳輸

2021-10-03 17:17:54 字數 2360 閱讀 9919

這裡記錄如何將python中的和陣列以字串指標的形式傳遞到c++,c++如何獲取這部分的資料,並在處理之後飯後兩個值到python使用。

python中的函式:

#將進行目標檢測後的和目標距行框傳入c++進行雙目測距,c++通過結構體指標返回兩個數(最小距離和最小距離對應的矩行框的位置索引)給python進行處理

defimg_and_boxs_to_cpp

(img_1,img_2,boxs)

: h, w = img_1.shape[0]

, img_1.shape[1]

len_box =

len(boxs)

# 獲取imaged_flip物件的資料指標

img_1_data = np.asarray(img_1, dtype=np.float32)

img_1_data = img_1_data.ctypes.data_as(ctypes.c_char_p)

# 獲取imagel_flip物件的資料指標

img_2_data = np.asarray(img_2, dtype=np.uint8)

img_2_data = img_2_data.ctypes.data_as(ctypes.c_char_p)

#獲取boxs物件指標

boxs_data = np.asarray(boxs,dtype=np.float32)

boxs_data = boxs_data.ctypes.data_as(ctypes.c_char_p)

# 設定輸出資料型別,與c++中返回值定義的型別一致

dll.measuredistance.restype = ctypes.pointer(structpointer)

# 呼叫dll裡的方法(這裡預設img_1和img_1的h、w一樣),getfromcpp()是c++用來接收並處理資料的函式,因為要返回兩值,只能通過結構體指標來返回

p = dll.getfromcpp(h, w, img_1_data,img_2_data,len_box,boxs_data)

#返回值1

result_1 = p.contents.result_1

#最小距離對應的矩行框位置索引

result_2 = p.contents.result_2

#條用dll中的方法來釋放指標

dll.release(p)

return result_1,result_2

因為要接收兩個返回值,而c++函式一般只能返回乙個返回值,所以這裡通過結構體指標來返回兩個值,c++中要宣告結構體,python中也需要。

#宣告結構體指標類,用於獲取c++返回的多個資料

class

structpointer

(structure)

: _fields_ =[(

"result_1"

,c_double),(

"result_2"

,c_int)

]

c++中的函式:

extern

"c" structpointer getfromcpp

(int height,

int width, uchar* dm_imgddata, uchar* dm_imgldata,

int len, uchar* boxs_data)

mat boxs

(len,

4, cv_32fc1, boxs_data)

; mat dm_imgd

(height, width, cv_32fc1, dm_imgddata)

;//dm_imgddata傳過來的資料是浮點型

mat dm_imgl

(height, width, cv_8uc3, dm_imgldata);.

... structpointer p =

(structpointer)

malloc

(sizeof

(structpointertest));

p->result_1 = result_1;

p->result_2 = result_2;

return p;

}

extern 「c」 宣告的是python可呼叫的so介面,關於python在windows和ubuntu下呼叫c++程式將另外記錄。

同樣,c++中要宣告結構體,與python對應

typedef

struct structpointertest

structpointertest,

*structpointer;

裝置與裝置之間 的資料傳輸

io解決問題 解決裝置與裝置之間 的資料傳輸問題。比如 硬碟 記憶體 記憶體 硬碟 位元組流 輸入位元組流 inputstream 所有輸入位元組流的基類。抽象類。fileinputstream 讀取檔案的輸入位元組流。bufferedinputstream 緩衝輸入位元組流。該類內部其實就是維護了...

C SFTP資料傳輸

我們有些客戶公司的資料比較重要,為了安全集團公司內部都使用的是區域網,但是有時候又不得不予外界網際網路做資料互動,所以有些不重要的系統是放在外界網際網路的,這樣以來內部系統和外部系統的資料互動就成為了問題,這樣以來就使用到了sftp伺服器來作為資料傳輸的中介。下面不說了,直接上c 此處使用了第三方動...

資料傳輸方式

資料傳輸方式 1 並行傳輸與序列傳輸 並行傳輸指的是資料以成組的方式,在多條並行通道上同時進行傳輸。常用的就是將構成一 個字元 的幾位二進位製碼,分別在幾個並行通道上進行傳輸。例如,採用8單位 的字 符 可以用8個通道並行傳輸。一次傳送乙個字元,因此收 發雙方不存在字元的同步問題,不需要另加 起 止...