前言: 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案例的更多相关文章

  1. 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 来 ...

  2. Python调用C# Com dll组件实战

    之前公司有套C# AES加解密方案,但是方案加密用的是Rijndael类,而非AES的四种模式(ECB.CBC.CFB.OFB,这四种用的是RijndaelManaged类),Python下Crypt ...

  3. Python调用windows下DLL详解

    Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...

  4. Python调用C的DLL(动态链接库)

    开发环境:mingw64位,python3.6 64位 参考博客: mingw编译dll: https://blog.csdn.net/liyuanbhu/article/details/426123 ...

  5. Python调用windows下DLL详解 - ctypes库的使用

    在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分数据的交互.使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件),下面将详 ...

  6. Python调用C++的DLL

    import os import sys from ctypes import * test = cdll.LoadLibrary('D:\Python27\py.dll') print test.A ...

  7. python调用c的方法

    虽然python是万能的,但是对于某些特殊功能,需要c语言才能完成.这样,就需要用python来调用c的代码了 具体流程: c编写相关函数 ,编译成库 然后在python中加载这些库,指定调用函数. ...

  8. Python调用C/C++动态链接库的方法详解

    Python调用C/C++动态链接库的方法详解 投稿:shichen2014 这篇文章主要介绍了Python调用C/C++动态链接库的方法,需要的朋友可以参考下 本文以实例讲解了Python调用C/C ...

  9. python 调用dll中c或c++语言的带指针方法,

    在项目开发中遇到了,python需要去调用一个动态链接库dll中的c++方法.这个方法的参数为一个指针类型的参数,一个bool类型参数, 在python中并未对数字类型进行区分. int LP_Agc ...

随机推荐

  1. 10/03/2019 PCL-1.8.1 Ubuntu 16.04 boost 1.69 CUDA 9.0 installation

    cmake -DCMAKE_BUILD_TYPE=None -DBUILD_GPU=ON -DBUILD_CUDA=ON -DBUILD_gpu_kinfu=ON -DBUILD_gpu_kinfu_ ...

  2. tomcat免安装版做成windows系统服务

    安装服务在命令行中进入/Tomcat路径/bin/,执行“service.bat install”:卸载服务在命令行中进入/Tomcat路径/bin/,执行“service.bat remove”:

  3. python爬虫套件在mac上的安装-bs的安装

    1,首先安装pip gem install pip 这种方式会报错: ERROR:  While executing gem ... (Gem::FilePermissionError) You do ...

  4. JS判断

    /***************************************************************** 表单校验工具类 (linjq) ***************** ...

  5. 简单几步,教你学会PHP,新手必看!

    学习php的方法,学东西,永远不要妄想有速成这一说,告诉你了一个方式,但是缺少努力这一环节,那也是白搭.掌握好的学习方法非常必要,看看这篇如何学习PHP培训的方法,在此提醒一下大家,PHP不像别的科目 ...

  6. Gnome osc,资源,,,,,因为官网难下

    链接:https://share.weiyun.com/5XPLvJz 密码:pygpci

  7. AI之旅(6):神经网络之前向传播

    前置知识   求导 知识地图   回想线性回归和逻辑回归,一个算法的核心其实只包含两部分:代价和梯度.对于神经网络而言,是通过前向传播求代价,反向传播求梯度.本文介绍其中第一部分. 多元分类:符号转换 ...

  8. 前端跨域(二):JSONP

    上一篇文章 前端跨域(一):CORS 实现了跨域的一种解决方案,IE8 和其他浏览器分别通过 XDomainRequest 和 XHR 对象原生支持 CORS.这次我将补一补 Web 服务中也非常流行 ...

  9. leetcode 381.Insert Delete GetRandom

    这道题中要求使用O(1)的方法来删除和插入元素的,那么首先需要寻找到对应的元素,这个可以使用map的O(1)的查询时间的,然后是删除对应的元素的,那么可以根据 堆排序中类似的做法把最后面的元素插入到前 ...

  10. Vue慕课网音乐项目随手记--node代理及数据抓取

    1.抓取数据 链接   https://y.qq.com/portal/playlist.html Parameters 通过上图能看到,qq音乐通过设置了refer和host来保护接口. 那么怎么才 ...