python使用ctypes调用c++函数时怎样传入IPlImage型的数据? 40C

python 代码

import ctypes
import numpy as np
import cv2
from Face_Alignment import warp_im, coord5point, resizeimage
import time
from numpy.ctypeslib import ndpointer
start = time.time()
so = ctypes.cdll.LoadLibrary
lib = so("./build/liblandmark.so")
class StructPointer(ctypes.Structure):
    _fields_ = [("x",ctypes.c_double),
                ("y",ctypes.c_double)]
lib.test.argtypes = [ctypes.c_int,ndpointer(ctypes.c_uint8)]
path = "/Huang/images/3.jpeg"
img = cv2.imread(path)
imge_1 = cv2.cv.LoadImage(path, cv2.cv.CV_LOAD_IMAGE_COLOR)

point = lib.landmark(1,imge_1)


c++代码:

extern "C"
{
seeta::StructPointer landmark(int argc, IplImage* imge)
{        
  seeta::FaceDetection detector("./build/seeta_fd_frontal_v1.0.bin");
  detector.SetMinFaceSize(40);
  detector.SetScoreThresh(2.f);
  detector.SetImagePyramidScaleFactor(0.8f);
  detector.SetWindowStep(4, 4);
  seeta::FaceAlignment point_detector((MODEL_DIR + "seeta_fa_v1.1.bin").c_str());

  IplImage *img_grayscale = NULL;
  cvCvtColor(imge, img_grayscale, CV_BGR2GRAY);//把从python中获得的iplimage参数灰度化传给img_grayscale

  IplImage *img_color = imge;


运行结果:Traceback (most recent call last):
File "test.py", line 27, in
point = lib.landmark(1,imge_1)
ctypes.ArgumentError: argument 2: : Don't know how to convert parameter 2
这里python中的Iplimage 参数应该如何通过ctypes传入c++中。我的实际问题是怎样把在python中获得的np.array传入c++函数中并赋值给Iplimage型的参数

0

1个回答

你传id(imge_1)试试 id()取地址的的,

0
xingjianfengaa
xingjianfengaa 还有其实你的so里函数应该用void*imge,否则像碰到这种跨语言的调用就麻烦
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
当用 Python ctypes 模块调用动态链接库,如何传入一个结构体指针
最近用 dv2xvid 这个东东很多,上两周几乎每天都用它跑一个晚上压缩2个小时的视频。于是又萌发了把它改进得更通用的念头。 目前 dv2xvid 有一个很严重的问题,就是只支持 xvid-1.1.0-beta2 的压缩。而事实上目前大家用的最多的是应该都是正式版本,比如 1.0.3 或者 1.1.0 之类。如果想能支持更多版本的 xvid codec,就必须能在压缩之前判断 xvid 的版
python3利用ctypes传入一个字符串类型的列表
pyhon用ctypes向c语言里传入一个字符串类型的列表
python中运用ctypes库实现c风格变量的定义和调用
ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数。ctypes的官方文档在这里。1. ctypes基本数据类型映射表参数类型预先设定好,或者在调用函数时再把参数转成相应的c_***类型。ctypes的类型对应如下:ctypes typeC typePython Typec_charchar1-character stringc_wcharwch...
【转】当用 Python ctypes 模块调用动态链接库,如何传入一个结构体指针
转自http://www.dup2.org/node/150 当用 Python ctypes 模块调用动态链接库,如何传入一个结构体指针 、 由 qyb 于 星期五, 2006-04-07 07:40 发表 技术 最近用 dv2xvid 这个东东很多,上两周几乎每天都用它跑一个晚上压缩2个小时的视频。于是又萌发了把它改进得更通用的念头。 目前 dv2xvid...
ctypes的运用(把一个numpy数组传入c中)
1.把一个二维数组转化成一维的,传入C void show_matrix(int *matrix, int rows, int columns) { int i, j; for (i=0; i<rows; i++) { for (j=0; j<columns; j++) { printf("matrix[%d][%d] = %d...
ctypes 加载的so库中函数参数的字符串传递问题(str与bytes转换)
在项目开发过程中,需要python使用ctypes 加载编译好的so库,然后调用so库的函数,python传入str参数,但是按通常python传入字符串参数的方法(func(“test”))时,so库中的函数不能接收到全部的字符串,而是只能接受第一个字符,这样显然不能达到调用的目的。 如何才能让完整的字符串传入到so库中的函数中呢?那就需要把str类型的参数转换成bytes类型才能够传入。
python利用ctypes的指针传入int型列表和string类型列表到c语言中
下面这个方法是将c语言的函数编译为动态链接库,然后python调用得到结果。这个c语言中没有main函数,是因为python只需要调用它的方法。将它和c++结合,用c++操作这个python的list,就需要用到extern “C”了。。。后续会出~~如果有大神可以不用extern”C”直接调用c++的,请留言,感谢分享
python调用dll文件时传入参数是int*,返回值是char*,对传入的char*所指的内容的修改
首先 若调用的dll中的函数的参数是int型的指针: 在
python调用C++,传递结构体与结构体指针,以及嵌套结构体
#include<iostream>using namespace std;//该文件名称:cpptest.cpp//终端下编译指令://g++ -o cpptest.so -shared -fPIC cpptest.cppstruct sub_struct{    char* test_char;    int test_int;};struct struct_def {    ch...
【python C结构体】Python Ctypes结构体指针处理(函数参数,函数返回)
一切以官网为准:https://docs.python.org/3.6/library/ctypes.html 以下为参考: 1、在python中调用C语言生成的动态库,返回结构体指针,并进行输出! mylib.c(动态库源代码) // 编译生成动态库: gcc -g -fPIC -shared -o libtest.so test.c      ...
使用python向C语言的链接库传递数组、结构体、指针类型的数据
使用python向C语言的链接库传递数组、结构体、指针类型的数据由于最近的项目频繁使用python调用同事的C语言代码,在调用过程中踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来调用C语言的代码库。 至于如何调用基础数据类型的数据,请大家参考我的另外一篇文章:python使用ctypes调用C/C++1. 使用python给C语言函数传递数组类型的参数想必很多时候,C语言会使用
python ctypes库2_指定参数类型和返回类型
python函数的参数类型和返回类型默认为int。如果需要传递一个float值给dll,那么需要指定参数的类型。如果需要返回一个flaot值到python中,那么需要指定返回数据的类型。数据类型参考python文档:https://docs.python.org/3.6/library/ctypes.html#fundamental-data-typesimport ctypes path = r...
python使用ctypes调用C接口库
之前项目需要测试C接口函数,网上搜了下,python的ctypes模块还是挺好用的。现在有时间总结下1. 科普windows下调用C接口函数,一般是调用dll或lib库。dll是指动态链接库,lib是指静态库,一般来说调用动态库比较多。ctypes提供了三种调用动态库的对象:cdll、windll、oledll。其中cdll主要用来加载C语言调用方式(cdecl),windll主要用来加载WIN3...
python3和c/c++的混合编程(ctypes的使用)
python作为一种胶水语言具有较高的开发效率, 但是其运行效率比较低, 当计算量比较大时,显得力不从心.  而ctypes是python下的一个可以链接c/c++的一个库. 可以将C函数编译成动态链接库, 即window下的.dll文件或者是linux下的.so文件. 这样我们通过使用cytpes可以加速代码的运行速度.test = cdll.LoadLibrary("./caleach.so"...
Python与C参数交互---结构体指针作为参数 实例
在Python中某些时候需要C做效率上的补充. 在实际应用中,需要做部分数据的交互. Python 可以通用 ctypes 模块很好地调用C. 下面演示了 Python 中调用C一个标准函数. 传递一个结构指针入. 得到C中分配内存数据 传递出. 希望对你的Python 学习有所帮助. 1 test.c #include #include typedef struct
ctypes库的使用 python调用Windows DLL
ctypes库的使用 python调用Windows DLL ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数。
python如何调用C, 如何注册成C的回调函数(python后台程序常用方法)
其实是python后台程序常用方法: C开发完成底层的功能,python直接把C当做python模块进行调用。
Windows下通过Python 3.x的ctypes调用C接口
        在Python中可以通过ctypes来调用动态库中的C接口,具体操作过程如下:        1. 使用vs2013创建一个加、减、乘、除的动态库,并对外提供C接口,code内容如下:        math_operations.hpp:#ifndef TEST_DLL_1_MATH_OPERATIONS_HPP_ #define TEST_DLL_1_MATH_OPERATIO...
python :通过ctypes DLL操作向C传递二维数组-window vs2017环境
windows 代码: extern “C” { //initArray.c _declspec(dllexport) void initArr(int arr[][2],int row) { for (int i = 0; i < 2*row; i++) { arr[i / 2][i % 2] = i; } } } python代码: import ctypes row = 8 brr=(...
python调用c函数参数类型问题
我的理解: python通过ctypes模块做了类型的对应。 参考ctypes文档:https://docs.python.org/3/library/ctypes.html python语言 ctype模块 c语言 int c_int int 就像java调用c,通过JNI做了类型对应 java JNI 是java的一部
Python Ctypes结构体指针处理(函数参数,函数返回)
参考网址: http://www.2cto.com/kf/201109/106444.html test.c(动态库源代码) // 编译生成动态库: gcc -g -fPIC -shared -o libtest.so test.c #include #include #include typedef struct StructPointerTest { char name[2
python调用c/c++时string的传入与返回深入分析
ctypes可以轻松实现在python调用c/c++的库,但是这貌似没有对string类型的传入和返回有很好的支持。这篇文对传入string类型的参数进行分析并提供返回string替代方法......
python 与 C 的交互(ctypes库使用)
python 与 C 的交互(ctypes库使用) ctypes是Python的一个外部库,可以使用python语言调用已经编译好的C语言函数以及数据类型并进行数据交换等。ctypes的官方文档在https://docs.python.org/3/library/ctypes.html 1. ctypes基本数据类型映射表 2. python调用c语言的函数库 1.生成...
python ctypes库3_如何传递并返回一个数组
可以将数组指针传递给dll,但无法返回数组指针,python中没有对应的数组指针类型。如果需要返回数组,需借助结构体。参考ctypes官方文档:https://docs.python.org/3.6/library/ctypes.html#structures-and-unions返回一个结构体例程:# 返回结构体 import ctypes path = r'E:\01_Lab\VisualSt...
python调用C++(仅限函数),ctypes调用so文件注意事项
单个.c文件生成.so: cd /d D:\Program Files (x86)\MinGW\bin gcc "D:\VisulStudio\gccSPA\gccSPA\SolarPosAngle.c" -fPIC -shared -o "D:\VisulStudio\gccSPA\gccSPA\gccSPA.so" python中调用 from ctypes import * aimHand...
Python Ctypes 多级指针 传参数 和返回值
最近在搞神经网络框架这块,由于框架是用C++写的但是后续的操作不想再用C++写(主要C++写的头疼)所以准备将后面的工作转入python中写这里涉及到利用Python 和Ctypes 来实现python调用C++的接口。 由于用到很多数组我这里全都是标志着指针的如果是二维就是 double ** arry 三维就是 double *** arry所以肯定是要涉及到多级指针的传入和返回问题接下来
Python ctypes模块加载C/C++ 动态库
折腾了很久,网上也少有找到关于参数引用的方法。 以下,为方便其他人参考 对主要问题的解决方式作以记录。 1. 参数传入和传出 如test.so中有如下接口: int DLLAPI_ChangeValue(int *value,char *cstr); 接口实现: int DLLAPI_ChangeValue(int *value,char *cstr) {     value...
python脚本利用ctypes调用c模块返回字符串
如何利用python来调用c的静态链接库呢? 如何利用python获取c库返回的字符串呢? 这里贴出几段简单的代码,希望能够帮助大家(有更好的欢迎交流哦)/// test.h /// #include <iostream> using namespace std; bool get_func_name(string &data);/// test.cpp /// #include "test.h"
python ctypes 调用 dll动态库小结
搞了半天,终于调用成功了,顺利把cpp文件编译成可被ctypes调用的dll文件,顺利在python中执行了dll里的函数。之前对windows的dll完全不熟悉,只知道它是windows的动态库文件,借着这次机会也稍微把它熟悉了一下。 第一:生成可被调用的dll文件 刚开始想使用cygwin生成dll文件,可是生成的dll文件每次在python中报”[153]不是有效的win32“错误,上网
python通过ctypes混合调用c/c++封装开源音频引擎libsoundio
其实python和c混合调用的方法很多,如swig、cpython等等,但这些都不是标准库,需要额外安装的,本文讲的是标准库的ctypes来调用c,实现强大的功能,没办法霸道C\C++就是那么强大,不服不行,有那种语言是无法调用C的,没有吧。 本文既不是扫盲也不是hello,world之类的,期初我百度了python通过ctypes封装调用c,全是千万一律的,一段基础代码拷贝了无数次,所以这次搞...
Linux下python如何调用c++的代码,用ctypes方法。。
Linux下python如何调用c++的代码,用ctypes方法。
python中使用 C 类型的数组以及ctypes 的用法
Python 在 ctypes 中为我们提供了类似C语言的数据类型, 它的用途(我理解的)可能是: (1) 与 其他语言(如 C、Delphi 等)写的动态连接库DLL 进行交换数据,因为 python 的 数据与 DLL难以进行数据交换。 (2) python 的字符串一旦形成,是不可变的,为了算法的需要,我们有时需要对字符串进行原位操作 ( in place ),而不想浪费另外的内存空间
python ctypes调用C返回指针类型,64位值被转换成32位值
调用c函数前先指定返回类型 lib.ctopy.restype = POINTER(c_ubyte)
python调用c++函数传递opencv图片
首先c或者c++需要编译成动态链接库,在cmake里面把add_executable改成add_library([project_name]  SHARED [xx.cpp]) 在写c++代码的时候,由于c++有重载功能,所以编译器在编译的时候是会把函数改名的,这个时候就需要强调需要被python调用的函数是以c的方式编译。例如: extern &quot;C&quot; { float test() { ...
python 中如何使用 C 类型的数组? ctypes 的用法
【转自】http://hi.baidu.com/jxq61/blog/item/90037f272a9ae46c35a80fdc.html Python 在 ctypes 中为我们提供了类似C语言的数据类型, 它的用途(我理解的)可能是: (1) 与 其他语言(如 C、Delphi 等)写的动态连接库DLL 进行交换数据,因为 python 的 数据与 DLL难以进行数据交换。 (2) p
关于python3调用C/C++的方法(ctypes)
转载请注明出处!     最近帮同事做一个历史数据的转换合并软件,使用python3从数据库读出数据,然后根据其中的几个字段相同的归类合并一行,然后输出到EXCEL中,数据大概是5W行,考虑到归类合并逻辑比较复杂,用python效率比较低,这部分用c/c++完成,python3调用生成的dll.运行截图  代码如下:python3代码如下:# -*- coding: utf-8 -*-'''Cre
利用ctypes获取numpy数组的指针
import numpy as np from ctypes import *a = np.asarray(range(16), dtype=np.int32).reshape([4,4]) if not a.flags['C_CONTIGUOUS']: a = np.ascontiguous(a, dtype=a.dtype) # 如果不是C连续的内存,必须强制转换 a_ctypes_p
python调用C++,C++回调Python,并传递参数
#include&amp;lt;iostream&amp;gt;#include&amp;lt;string.h&amp;gt;using namespace std;//该文件名称:cpptest.cpp//终端下编译指令://g++ -o cpptest.so -shared -fPIC cpptest.cpptypedef unsigned char byte;struct sub_Struct{    int sub_t...
python 调用C程序的结构体和函数
#include typedef struct TestDLL_ { int a; char *b; } testdll; testdll test(testdll t) { t.a=t.a+t.a; printf("%d\n%s\n",t.a,t.b); return t; } from ctypes import * dllpath='test.dll' dll=C
Python中ctypes的使用整理
转载:点击打开链接ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数。ctypes的官方文档在这里。1. ctypes基本数据类型映射表参数类型预先设定好,或者在调用函数时再把参数转成相应的c_***类型。ctypes的类型对应如下:ctypes typeC typePython Typec_charchar1-character stringc...
文章热词 设计制作学习 统计学稳健估计opencv函数 机器学习教程 Objective-C培训 交互设计视频教程
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python怎样学习 怎样学习python