使用ctypes将numpy uint8数组转换为自定义对象(来自Darknet)...?

时间:2018-12-20 02:31:23

标签: python numpy darknet

我想编写一个利用https://github.com/pjreddie/darknet附带的darknet.py文件的python脚本。

darknet.py文件中有一个Image对象,定义如下:

class IMAGE(Structure):
    _fields_ = [("w", c_int),
                ("h", c_int),
                ("c", c_int),
                ("data", POINTER(c_float))]
在动态库中使用的

lib = CDLL("./libdarknet.so", RTLD_GLOBAL)

我像这样从opencv加载图像:

import cv2
image = cv2.imread(src)

现在我需要从opencv给我的numpy数组(在uint8中)转换为darknet可以使用的Image对象。

这是我尝试过的:

import darknet as dn
import ctypes

dnim = dn.IMAGE()
(dnim.h,dnim.w,dnim.c) = image.shape
#dnim.data = (image.astype(np.float64)/255).flatten().ctypes.data_as(ctypes.POINTER(ctypes.c_float))
#dnim.data.content = dn.c_array( ctypes.c_float, image.astype(np.float64)/255 )

image.shape部分似乎可以正常工作。注释行是加载dn.IMAGE()数据成员的两种不同尝试。第一个引起分段错误,第二个引发错误:TypeError: only size-1 arrays can be converted to Python scalars

我确实知道dnim.data(使用load_image()函数加载时)和第一次尝试创建的对象都是相似的类型,特别是:<__main__.LP_c_float object at 0xXXXXXXXXXXXX>,但我想我不能只分配一个另一个?

0 个答案:

没有答案