python與C語言之間的陣列傳遞

2021-10-23 03:47:32 字數 1407 閱讀 1740

參考文章:

在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 如果在被呼叫的函式 不包括主函式 中定義陣列,起長度可以是變數或非常量表示式,可稱...