python调用c++

import os

import matplotlib.pyplot as plt
import numpy as np
import SimpleITK as sitk
import ctypes



def find(args,file):
    //加载需要涉及的到dll
    path = "./Release/cudart64_100.dll"
    lib1 = ctypes.CDLL(r'./Release/cudart64_100.dll')
    lib2 = ctypes.CDLL(r'./Release/opencv_core440.dll')
    lib3 = ctypes.CDLL(r'./Release/opencv_imgproc440.dll')
    alglib = ctypes.CDLL(r"./Release/AlgoLib2.dll")
     //定义调用函数的参数类型
    alglib.gotoSegBrainTissue.argtypes = (ctypes.POINTER(ctypes.c_short),
                                          ctypes.c_int * 3,
                                          ctypes.c_double * 3,
                                          ctypes.POINTER(ctypes.c_uint8),
                                          ctypes.POINTER(ctypes.c_uint8),
                                          ctypes.POINTER(ctypes.c_float)
                                          )

	//定义输入
    img = sitk.ReadImage(os.path.join(args.dataset_path, "data")+"/"+file, sitk.sitkInt16)
    label= "label_"+file.split("/")[-1].split("_")[0]+".nii.gz"
    label = sitk.ReadImage(os.path.join(args.dataset_path, "Labels")+"/"+label, sitk.sitkInt16)
    label_array = sitk.GetArrayFromImage(label)
    image_array = sitk.GetArrayFromImage(img)
    spacing = img.GetSpacing()
    image_carr = image_array
    if not image_carr.flags['C_CONTIGUOUS']:
        image_carr = np.ascontiguous(image_carr, dtype=image_carr.dtype)
    a_ctypes_ptr = ctypes.cast(image_carr.ctypes.data, ctypes.POINTER(ctypes.c_short))

    mask_array = np.zeros(image_array.shape, dtype=np.uint8)
    brain_mask_array = np.zeros(image_array.shape, dtype=np.uint8)

    mask_carr = mask_array
    if not mask_carr.flags['C_CONTIGUOUS']:
        mask_carr = np.ascontiguous(mask_carr, dtype=mask_carr.dtype)
    mask_ctypes_ptr = ctypes.cast(mask_carr.ctypes.data, ctypes.POINTER(ctypes.c_uint8))

    brain_mask_carr = brain_mask_array
    if not brain_mask_carr.flags['C_CONTIGUOUS']:
        brain_mask_carr = np.ascontiguous(brain_mask_carr, dtype=brain_mask_carr.dtype)
    brain_mask_ctypes_ptr = ctypes.cast(brain_mask_carr.ctypes.data, ctypes.POINTER(ctypes.c_uint8))

    arg1 = a_ctypes_ptr
    arg4 = mask_ctypes_ptr
    arg5 = brain_mask_ctypes_ptr

    imgsize = (ctypes.c_int * 3)(
        *(ctypes.c_int(image_carr.shape[2]), ctypes.c_int(image_carr.shape[1]), ctypes.c_int(
            image_carr.shape[0])))
    spac = (ctypes.c_double * 3)(
        *(ctypes.c_double(spacing[0]), ctypes.c_double(spacing[1]), ctypes.c_double(spacing[2])))

    pos = ctypes.c_float(0)
    refpos = ctypes.byref(pos)

    alglib.gotoSegBrainTissue.restype = None
    //调用函数
    nodulesPoints = alglib.gotoSegBrainTissue(arg1, imgsize, spac, arg4, arg5, refpos)


    
    for i in range(mask_array.shape[0]):
        data = mask_array[i]
        plt.imshow(data)
        plt.show(

        )
    B = pos.value + 25 + 10
    final = int(round(B / spacing[2]))
    print(final)
    d_label = label_array[final]
    final = image_carr[final]

    dst = sitk.GetImageFromArray(final)
    d_label = sitk.GetImageFromArray(d_label)



    return dst, d_label
if __name__ == "__main__":
    import argparse
    parser = argparse.ArgumentParser(description='Hyper-parameters management')
    parser.add_argument('--dataset_path', default=r"./traindata",
                        help='fixed trainset root path')

    args = parser.parse_args()
    file_list = os.listdir(os.path.join(args.dataset_path, "data"))
    for i, ct in enumerate(file_list):
        data, label = find(args,ct)
        sitk.WriteImage(data, r"./data/img/"+ct.split('/')[-1].split("_")[0]+".nii.gz")
        sitk.WriteImage(label, r"./data/mask/" + "label_" + ct.split('/')[-1].split("_")[0] + ".nii.gz")

可以参考详解调用dll

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值