Josh-W 发表于 2020-1-14 19:04

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

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

我调用的代码如下: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,然后看哪种更适合你的项目

好的,谢谢,明天搜一下看看
页: [1]
查看完整版本: 求助python通过ctypes调用c++的动态链接库,操作后的数据怎么转回python能识别的数组