這裡記錄如何將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個通道並行傳輸。一次傳送乙個字元,因此收 發雙方不存在字元的同步問題,不需要另加 起 止...