将结构从Python传递到C++或传递一个NUMPY数组而不是文件地址到Y

2024-06-16 09:24:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将内存中的图像传递给Yolo,而不是文件地址。在

source code中,它使用openCV读取图像。由于openCV在c++中返回mat格式,因此它使用mat_to_image(mat im)函数将mat格式转换为图像格式。 但是python中的opencv使用numpy.ndarray,所以我不能使用mat_to_image()。在

因此,我尝试按照作者的代码here将numpy数组放入图像格式:

class IMAGE(ctypes.Structure):
_fields_ = [("w", ctypes.c_int),
            ("h", ctypes.c_int),
            ("c", ctypes.c_int),
            ("data", ctypes.POINTER(ctypes.c_float))]

以下是我所拥有的:

^{pr2}$

我还用这种方式改变了detect函数:

^{3}$

但是当我运行它时,我得到一个错误:

ArgumentError: argument 2: <class 'TypeError'>: expected IMAGE instance instead of IMAGE

我想问题是我没有以正确的方式传递数据结构,但我不确定。在

我读了一些关于在Python和C++之间传递数据结构的其他答案,但我认为应该有一个更简单的解决方案。在


Tags: to函数图像imagenumpy数据结构格式方式
1条回答
网友
1楼 · 发布于 2024-06-16 09:24:40

我是这样做的:

以下是如何将numpy数组转换为图像格式:

import darknet as dn
def array_to_image(arr):
    arr = arr.transpose(2,0,1)
    c = arr.shape[0]
    h = arr.shape[1]
    w = arr.shape[2]
    arr = (arr/255.0).flatten()
    data = dn.c_array(dn.c_float, arr)
    im = dn.IMAGE(w,h,c,data)
    return im

使用问题中提到的detect函数的修改版本。在

结果是这样的:

^{pr2}$

got the function from here

相关问题 更多 >