吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|zbsqdt.com

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 229|回复: 2

[求助] 求助python通过ctypes调用c++的动态链接库,操作后的数据怎么转回python能识别的数组

[复制链接]
Josh-W 发表于 2020-1-14 19:04
项目需要调用c++的算法,同事给了个dll,我使用PyQT5做的界面,然后传数据的时候,按网上的案例,通过ctypes库,把变量都转成c++一样类型的了,这两个方法都是去操作display_img的内存地址,我能打印出地址,但是不知道怎么把display_img重新转回python能用的数组,有大佬有相关经验吗?麻烦指点一下!
display_img本来是应该开辟个内存,传指针过去的,我不知道怎么弄,就还是读了一个图片文件,调方法应该会重写这片内存,目前看是没报错

我调用的代码如下:
[Python] 纯文本查看 复制代码
from ctypes import *
import ctypes
import cv2
import numpy as np

dll = cdll.LoadLibrary("./AlgorithmDll.dll")

GetDispImgByMatch = dll.GetDispImgByMatch
GetDispImgByMatch.argtypes = [
    ctypes.POINTER(ctypes.c_ubyte),
    ctypes.POINTER(ctypes.c_ubyte),
    ctypes.POINTER(ctypes.c_ubyte),
    ctypes.c_int,
    ctypes.c_int]
GetDispImgByMatch.restype = None

SmoothDispImage = dll.SmoothDispImage
SmoothDispImage.argtypes = [
    ctypes.POINTER(ctypes.c_ubyte),
    ctypes.c_int,
    ctypes.c_int]
SmoothDispImage.restype = None
#
width = ctypes.c_int(640)
height = ctypes.c_int(480)

img1 = cv2.imread('./Clibration/Calibration.bmp')
img_data = np.asarray(img1).ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte))

img2 = cv2.imread('./Capture_images/20200111/19363834336.bmp')
img_data2 = np.asarray(img2).ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte))

img3 = cv2.imread('./Capture_images/20200111/193617020263.bmp')
Dispaly_img = np.asarray(img3).ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte))

GetDispImgByMatch(img_data, img_data2, Dispaly_img, width, height)
SmoothDispImage(Dispaly_img,width, height)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

老昝家的小麦芽 发表于 2020-1-14 20:43
推荐你看下 pybind11,然后看哪种更适合你的项目
 楼主| Josh-W 发表于 2020-1-14 23:41
老昝家的小麦芽 发表于 2020-1-14 20:43
推荐你看下 pybind11,然后看哪种更适合你的项目

好的,谢谢,明天搜一下看看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:禁止回复非技术或与主题无关水贴,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2020-1-24 12:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表

页面底部区域 foot.htm