下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第關(guān)于python調(diào)用c++動態(tài)庫dll時的參數(shù)傳遞問題目錄stringcv::Mat
string
C++生成dll代碼:
#includeiostream
extern"C"__declspec(dllexport)intget_str_length(char*str);
intget_str_length(char*in_str)
std::stringstr(in_str);
returnstr.length();
將VS_create_dll.dll放在與python相同文件夾下。
python調(diào)用代碼
importctypesasC
dll=C.cdll.LoadLibrary('VS_create_dll.dll')
#4.1傳入字符串調(diào)用demo方法一
p_str=C.c_char_p(b'hello')#或p_str=b'hello'
str_length1=dll.get_str_length(p_str)
print("傳入字符串調(diào)用demo方法一:")
print(str_length1)
#4.1傳入字符串調(diào)用demo方法二
get_str_length=dll.get_str_length
get_str_length.argtypes=[C.c_char_p]
get_str_length.restype=C.c_int
str_length2=get_str_length(p_str)
print("傳入字符串調(diào)用demo方法二:")
print(str_length2)
cv::Mat
python中opencv存儲一幅圖像的數(shù)據(jù)類型是array,而在C++中opencv存儲一幅圖像的數(shù)據(jù)類型是Mat,這兩者之間的轉(zhuǎn)換需要通過unsignedchar*來完成。
數(shù)據(jù)類型對應(yīng)關(guān)系
python:C.POINTER(C.c_ubyte)
C++:unsignedchar*
python中將array轉(zhuǎn)換成C.POINTER(C.c_ubyte)(對應(yīng)C++中的unsignedchar*)的方法
importctypesasC
importcv2
img=cv2.imread('ROI0.png')
#將img轉(zhuǎn)換成可被傳入dll的數(shù)據(jù)類型
img.ctypes.data_as(C.POINTER(C.c_ubyte))
C++中將unsignedchar*轉(zhuǎn)換成Mat的方法
假設(shè)傳入的變量為unsignedchar*src_data
Matsrc=Mat(rows,cols,CV_8UC3,src_data);
C++中opencv提供了通過unsignedchar*構(gòu)造Mat類型的API,這個API還需要行數(shù)、列數(shù)、通道數(shù)等信息。
因此python調(diào)用dll時,不僅要將src_data傳入,還需要將rows,cols等信息傳入。
C++中將Mat轉(zhuǎn)換成unsignedchar*的方法
src.data
C++中opencv提供了將Mat轉(zhuǎn)換成unsignedchar*的API,即Mat.data
C++中將unsignedchar*復(fù)制的方法
memcp(ret_data,src.data,rows*cols*3);
python中將C.POINTER(C.c_ubyte)(對應(yīng)C++中的unsignedchar*)轉(zhuǎn)換成array的方法
#聲明并初始化變量
importnumpyasnp
importcv2
ret_img=np.zeros(dtype=np.uint8,shape=(rows,cols,3))
#calldll,ret_img.ctypes.data_as(C.POINTER(C.c_ubyte))作為參數(shù)傳入
cv2.imshow("result",ret_img)
由于在python中ret_img本身就是array類型的,只是在調(diào)用dll時將其作為形參轉(zhuǎn)換成了C.POINTER(C.c_ubyte),因此ret_img不需要轉(zhuǎn)換。
C++生成dll代碼:
#include"stdafx.h"
#includeiostream
#includeopencv2/opencv.hpp
#includeopencv2/highgui/highgui.hpp
#includeopencv2/imgproc/imgproc.hpp
usingnamespacecv;
usingnamespacestd;
extern"C"__declspec(dllexport)voiddraw_circle(introws,intcols,unsignedchar*src_data,unsignedchar*ret_data);
voiddraw_circle(introws,intcols,unsignedchar*src_data,unsignedchar*ret_data)
//將unsignedchar轉(zhuǎn)換成Mat
Matsrc=Mat(rows,cols,CV_8UC3,src_data);
//在圖像上畫一個藍色的圓
circle(src,Point(60,60),10,Scalar(255,0,0));
//將Mat轉(zhuǎn)換成unsignedchar
memcpy(ret_data,src.data,rows*cols*3);
python
importctypesasC
importcv2
importnumpyasnp
dll=C.cdll.LoadLibrary("draw_circle.dll")
img=cv2.imread('ROI0.png')
(rows,cols)=(img.shape[0],img.shape[1])
ret_img=np.zeros(dtype=np.uint8,shape=(rows,cols,3))
dll.draw_circle(rows,cols,img.ctypes.data_as(C.POINTER(C.c_ubyte)),r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026浙江開化農(nóng)村商業(yè)銀行寒假實習(xí)生社會實踐活動招募備考考試試題附答案解析
- 2025廣東佛山市順德區(qū)沙滘初級中學(xué)第二學(xué)期臨聘教師招聘備考考試試題附答案解析
- 2026福建南平市建陽區(qū)文化體育和旅游局招聘1人備考考試題庫附答案解析
- 物業(yè)公司生產(chǎn)責(zé)任制度
- 原材料生產(chǎn)過程管理制度
- 2026重慶市萬州區(qū)燕山鄉(xiāng)人民政府招聘全日制公益性崗位1人備考考試試題附答案解析
- 倉鼠生產(chǎn)管理員工制度
- 生產(chǎn)企業(yè)黑名單制度
- 2026年河北承德市教育局公開選聘急需緊缺學(xué)科教師39名參考考試題庫附答案解析
- 戒毒所生產(chǎn)車間制度
- 河堤植草護坡施工方案
- 2025中國氫能源產(chǎn)業(yè)發(fā)展現(xiàn)狀分析及技術(shù)突破與投資可行性報告
- 高校行政管理流程及案例分析
- 高效節(jié)水灌溉方式課件
- 基坑安全工程題庫及答案解析
- 《人間充質(zhì)基質(zhì)細胞來源細胞外囊泡凍干粉質(zhì)量要求》(征求意見稿)
- 2025年海南省中級經(jīng)濟師考試(工商管理專業(yè)知識和實務(wù))能力提高訓(xùn)練試題庫及答案
- 鄉(xiāng)鎮(zhèn)村監(jiān)會培訓(xùn)課件
- 入團申請書教學(xué)課件
- 松下微波爐NN-DS581M使用說明書
- 2025年江蘇省招聘警務(wù)輔助人員考試真題及答案
評論
0/150
提交評論