參考文章:
在ubuntu系統下測試python呼叫c++程式,完成陣列傳入、傳出、傳輸。其實就是特定資料型別的陣列。
#include "opencv2/opencv.hpp"
#define dllexport extern "c"
dllexport void sum_f(float* a,float* b,float* res,int n)
{ for(int i=0; ig++ test.cpp -fpic -shared -o test.so `pkg-config --cflags --libs opencv`
單引號為呼叫預設安裝的opencv
from ctypes import cdll
import numpy as np
import ctypes
#匯入動態庫
mydll = cdll.loadlibrary('test.so')
# 函式宣告
sum_f = mydll.sum_f
sum_f.argtypes = [np.ctypeslib.ndpointer(dtype=np.float32,ndim=1,flags="c_contiguous"),
np.ctypeslib.ndpointer(dtype=np.float32,ndim=1,flags="c_contiguous"),
np.ctypeslib.ndpointer(dtype=np.float32,ndim=1,flags="c_contiguous"),
ctypes.c_int]
x = np.ones(12,dtype=np.float32)*2
y = np.ones(12,dtype=np.float32)*3
print('x=',x)
print('y=',y)
res = np.zeros(12,dtype=np.float32)
#函式呼叫
sum_f(x,y,res,12)
print('x+y=',res)
# test opencv ***********************************
test_opencv = mydll.test_opencv
test_opencv.argtypes = [np.ctypeslib.ndpointer(dtype=np.uint8,ndim=1,flags="c_contiguous"),
ctypes.c_int]
n = 255
img = np.zeros((n,n,3),np.uint8)
img[:,:,0] = 255
img = img.reshape(-1)
test_opencv(img,n)
輸入為x、y,輸出為res,為兩個之和。 c語言之指標與陣列
考慮該例子 int calendar 12 31 該語句宣告了calendar是乙個陣列,該陣列擁有12個陣列元素,其中每個元素都是乙個擁有31個整型元素的陣列 而不是反過來理解 因此,sizeof calendar 的值是12 31 372與sizeof int 的乘積。如果calendar不是用...
C語言之指標與陣列
前言 訪問陣列元素既可以使用陣列名加下標的方法,也可以使用指標的方法。但使用指標的方法可以使 更緊湊 更靈活 更高效。一 幾個概念而陣列名代表陣列的起始位址,即陣列的指標。說明 二 指標訪問一維陣列 1 利用指標名構造指標表示式 例如 定義整型陣列a,int a 6 2 利用指標變數訪問陣列 三 指...
C語言之陣列
c語言之陣列 一,一維陣列 1,一維陣列的定義 型別符 陣列名 常量表示式 注 1 常量表示式中可以包括常量和符號常量.int a 3 5 是合法的,int a n 是不合法的,c語言不允許對陣列的大小作動態定義 2 如果在被呼叫的函式 不包括主函式 中定義陣列,起長度可以是變數或非常量表示式,可稱...