随笔 - 54  文章 - 0  评论 - 1  阅读 - 46463

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))
复制代码

 

posted on   hahanonym  阅读(408)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示