我正在cv2.imread("abc.tiff",1)
从我的 python 接口读取图像,我想将它传递给由 pybind11 绑定的 c++ 函数。C++ 函数需要 acv::Mat
作为输入。
现在我了解到 python 将其转换为 NumPY ,一个 NxM 3D 数组
我发现数据高度、宽度、通道分别为 5504 8256 3。
任何帮助我如何找到解决方案。
同样,我需要将一个传递cv::Mat
给 Python 接口
我正在cv2.imread("abc.tiff",1)
从我的 python 接口读取图像,我想将它传递给由 pybind11 绑定的 c++ 函数。C++ 函数需要 acv::Mat
作为输入。
现在我了解到 python 将其转换为 NumPY ,一个 NxM 3D 数组
我发现数据高度、宽度、通道分别为 5504 8256 3。
任何帮助我如何找到解决方案。
同样,我需要将一个传递cv::Mat
给 Python 接口
对于python numpy -> c++ cv2
我找到了一种方法,如何通过本机 python 扩展模块来做到这一点。
蟒蛇3
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 包装器解决方案链接
阅读更多关于扩展模块链接
通过 python 扩展模块链接阅读更多关于 numpy 的信息