gpt4 book ai didi

Python OpenCV 将 mat ptr 传递给 C++ 代码

转载 作者:行者123 更新时间:2023-11-28 05:41:08 26 4
gpt4 key购买 nike

使用 Python 3 和 OpenCV 3。

我用 C++ 编写了一些 DLL,它们导出一些 C 类型函数和一个 uchar3 C 类型结构。我一直在 C++ 项目中将它们与 OpenCV 一起使用,但我也希望能够从 Python 访问它们。我是 Python 的新手,但我看到 ctypes 提供了一种使用 DLL 的相当简单的方法。

我无法解决的是如何从 Python 中获取指向 OpenCV Mat 的指针。使用 C++,我执行以下操作:

    myMatDataPointer = myMat.ptr<uchar>(0)

理想情况下,我想找到一种简单的方法来使用 uchar3 结构,但我看到 ctypes 开箱即用地支持 char*,所以如果我能弄清楚的话,我可以凑合使用它如何让一个指向 Mat 的数据。

最佳答案

我刚刚意识到这个问题从未得到解答。我现在可以提供一个我一直在使用的。它支持使用纯 C 接口(interface)的双向通信。

import cv2
import ctypes
import numpy as np
import numpy.ctypeslib as npct

# Tell numpy what kind of pointer we want to use, load the dll
ucharPtr = npct.ndpointer(dtype=np.uint8, ndim=1, flags='CONTIGUOUS')
dll = ctypes.WinDLL('file.dll')

# the 'process_frame' function exported by the dll reads from
# the first pointer and writes to the second
process = dll['process_frame']
process.restype = None
process.argtypes = [ucharPtr, ucharPtr]

# Make two empty images for demonstration purposes
# OpenCV Python uses numpy arrays images, not Mat's
# This makes it super easy to work with images in python
in_image = np.zeros(shape,np.uint8,order='C').ravel()
out_image = np.zeros(self.shape,np.uint8,order='C').ravel()
process(in_image, out_image)

我当然可以为 in_image 使用更有趣的东西,但我们已经成功地将图像从 OpenCV python 发送到 dll,并且可以使用我们的 dll 返回的任何内容。

关于Python OpenCV 将 mat ptr 传递给 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com