gpt4 book ai didi

python - 将图像数据从 python 传递到 c++ 中的 cv::mat

转载 作者:行者123 更新时间:2023-12-01 09:08:44 25 4
gpt4 key购买 nike

我正在从 python 界面读取图像 cv2.imread("abc.tiff",1) ,我想将其传递给由 pybind11 绑定(bind)的 C++ 函数。 C++ 函数需要 cv::Mat 作为输入。

现在我了解到 python 将其转换为 NumPY ,一个 NxM 3D 数组

我发现数据高度、宽度、 channel 分别为5504 8256 3。

请帮助我如何找到解决方案。

<小时/>

同样,我需要将 cv::Mat 传递给 Python 接口(interface)

最佳答案

对于 python numpy -> c++ cv2 我找到了一种通过 native python 扩展模块来完成此操作的方法。

python3

image = cv.imread("someimage.jpg", 1)
dims = image.shape
image = image.ravel()
cppextenionmodule.np_to_mat(dims, image)

c++

static PyObject *np_to_mat(PyObject *self, PyObject *args){
PyObject *size;
PyArrayObject *image;

if (!PyArg_ParseTuple(args, "O!O!", &PyTuple_Type, &size, &PyArray_Type, &image)) {
return NULL;
}
int rows = PyLong_AsLong(PyTuple_GetItem(size ,0));
int cols = PyLong_AsLong(PyTuple_GetItem(size ,1));
int nchannels = PyLong_AsLong(PyTuple_GetItem(size ,2));
char my_arr[rows * nchannels * cols];

for(size_t length = 0; length<(rows * nchannels * cols); length++){
my_arr[length] = (*(char *)PyArray_GETPTR1(image, length));
}

cv::Mat my_img = cv::Mat(cv::Size(cols, rows), CV_8UC3, &my_arr);

...
}

你可以检查boost python包装解决方案link

了解有关扩展模块的更多信息 link

通过 python 扩展模块了解有关 numpy 的更多信息 link

关于python - 将图像数据从 python 传递到 c++ 中的 cv::mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51834420/

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