python 调用C的DLL案例
前言: python不能直接调用C++只能调用纯C的DLL
此处案例是python模仿opencv的cv2包,但是用c的DLL调用
import os
import csv
import time
import ctypes
from ctypes import *
opencv = CDLL("opencv_world310.dll")
class IplTileInfo(Structure):
_fields_ = [] class IplROI(Structure):
_fields_ =[
('coi', c_int),
('xOffset', c_int),
('yOffset', c_int),
('width', c_int),
('height', c_int)
]
class IplImage(Structure):
def __repr__(self):
res = []
for field in self._fields_:
if field[0] in ['imageData', 'imageDataOrigin']:
continue
res.append('%s=%s' % (field[0], repr(getattr(self, field[0]))))
return self.__class__.__name__ + '(' + ','.join(res) + ')' IplImage._fields_ = [
("nSize",c_int),
("ID",c_int),
("nChannels",c_int),
("alphaChannel",c_int),
("depth",c_int),
("dataOrder",c_int),
("origin",c_int),
("align",c_int),
("width",c_int),
("height",c_int),
("imageSize",c_int),
("widthStep",c_int),
("BorderMode",c_int*4),
("BorderConst",c_int*4),
("colorModel",c_char*4),
("channelSeq",c_char*4),
("imageData",c_void_p),
("imageDataOrigin",c_char_p),
("imageId",c_void_p),
("roi", POINTER(IplROI)),
("maskROI", POINTER(IplImage)),
("tileInfo", POINTER(IplTileInfo))] loadimageFunc=opencv.cvLoadImage
loadimageFunc.argtypes =[c_char_p,c_int]
loadimageFunc.restype = POINTER(IplImage)
cvimage = loadimageFunc(mpath,2).contents pt=POINTER(c_char)
data=ctypes.cast(cvimage.imageData,pt) # 这里的转换非常重要
等同于
import os
import csv
import time
import cv2 #python opencv
import ctypes
from cv2 import *
from ctypes import * cvimage = cv2.imread(mpath, cv2.IMREAD_ANYDEPTH)
data=cvimage.ctypes.data_as(ctypes.POINTER(ctypes.c_char))
python 调用C的DLL案例的更多相关文章
- paip.java c# .net php python调用c++ c dll so windows api 总结
paip.java c# .net php python调用c++ c dll so windows api 总结 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来 ...
- Python调用C# Com dll组件实战
之前公司有套C# AES加解密方案,但是方案加密用的是Rijndael类,而非AES的四种模式(ECB.CBC.CFB.OFB,这四种用的是RijndaelManaged类),Python下Crypt ...
- Python调用windows下DLL详解
Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...
- Python调用C的DLL(动态链接库)
开发环境:mingw64位,python3.6 64位 参考博客: mingw编译dll: https://blog.csdn.net/liyuanbhu/article/details/426123 ...
- Python调用windows下DLL详解 - ctypes库的使用
在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分数据的交互.使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件),下面将详 ...
- Python调用C++的DLL
import os import sys from ctypes import * test = cdll.LoadLibrary('D:\Python27\py.dll') print test.A ...
- python调用c的方法
虽然python是万能的,但是对于某些特殊功能,需要c语言才能完成.这样,就需要用python来调用c的代码了 具体流程: c编写相关函数 ,编译成库 然后在python中加载这些库,指定调用函数. ...
- Python调用C/C++动态链接库的方法详解
Python调用C/C++动态链接库的方法详解 投稿:shichen2014 这篇文章主要介绍了Python调用C/C++动态链接库的方法,需要的朋友可以参考下 本文以实例讲解了Python调用C/C ...
- python 调用dll中c或c++语言的带指针方法,
在项目开发中遇到了,python需要去调用一个动态链接库dll中的c++方法.这个方法的参数为一个指针类型的参数,一个bool类型参数, 在python中并未对数字类型进行区分. int LP_Agc ...
随机推荐
- Windows10 VS2017 C++编译Linux程序
#include <cstdio> #include <iostream> #include "unistd.h" using namespace std; ...
- canvas 添加线和删除线 及获取相关位置信息源码
其他相关链接: https://github.com/lusase/lineDrawer.git https://www.jb51.net/css/359062.html https://www.jb ...
- css内外边距属性
盒子模型: 所有HTML元素可以看作盒子,在CSS中,"box model"是用来设计和布局时 使用. CSS盒模型本质上是一个盒子, 封装周围的HTML元素, 它包括:边距,边框 ...
- Java 8 Lambda 表达式(一)
Java 8 新特性 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lambda 表 ...
- Hadoop学习笔记2 - 第一和第二个Map Reduce程序
转载请标注原链接http://www.cnblogs.com/xczyd/p/8608906.html 在Hdfs学习笔记1 - 使用Java API访问远程hdfs集群中,我们已经可以完成了访问hd ...
- matlab中如何用rand产生相同的随机数
直接给链接:rand()产生相同随机数
- flume实现kafka到hdfs测试用例
kafka 到hdfs at1.sources =st1 at1.channels = ct1 at1.sinks = kt1 # For each one of the sources, the t ...
- php中include和require的区别(整理)
require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 requi ...
- SOFARPC —— SPI 解析
一.前言 我之前研究过微博的Motan框架(当时接触的第一个RPC框架),当时懵懵懂懂,现在,上手SOFARPC框架,感觉比较轻松,事物的本质都是相通的.以前写博文,会逐行分析源码,慢慢地发现,源码其 ...
- anki vector robot入门语音指令大全
vector机器人功能不断完善. 一:刚开始支持一些基础指令,你跟他说话他能在本机识别,然后做出相应的响应.在说这部分指令之前,需要加上Hey Vector.(嘿,维课的),然后他会准备听取你的指令, ...