将图像数据从python传递到c++; 我正在读取一个图像,如:代码> CV2.imBLIDE(“abc .TIFF”,1)< /C>从我的Python接口,我想把它传递给PybDun11绑定的C++函数。C++函数需要一个 cv::MAT< /Cord>作为输入。

将图像数据从python传递到c++; 我正在读取一个图像,如:代码> CV2.imBLIDE(“abc .TIFF”,1)< /C>从我的Python接口,我想把它传递给PybDun11绑定的C++函数。C++函数需要一个 cv::MAT< /Cord>作为输入。,python,numpy,c++11,pybind11,opencv-mat,Python,Numpy,C++11,Pybind11,Opencv Mat,现在我了解到python将其转换为NumPY,一个NxM 3D数组 我发现数据高度、宽度和通道分别为5504 8256 3 有谁能帮我找到解决办法吗 同样,我需要通过 CV::Mat < /C>到Python接口对于 Python NoMPY-> C++ +CV2< /Cord>我找到了如何通过本地Python扩展模块来完成它的方法。 蟒蛇3 image = cv.imread("someimage.jpg", 1) dims = image.shape image = image.ravel

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

我发现数据高度、宽度和通道分别为5504 8256 3

有谁能帮我找到解决办法吗



同样,我需要通过<代码> CV::Mat < /C>到Python接口

对于<代码> Python NoMPY-> C++ +CV2< /Cord>我找到了如何通过本地Python扩展模块来完成它的方法。 蟒蛇3

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

static PyObject*np\u to\u mat(PyObject*self,PyObject*args){
PyObject*大小;
PyArrayObject*图像;
if(!PyArg_ParseTuple(args,“O!O!”,&PyTuple_类型,&size,&PyArray_类型,&image)){
返回NULL;
}
int rows=PyLong_AsLong(PyTuple_GetItem(size,0));
int cols=PyLong_AsLong(PyTuple_GetItem(大小,1));
int nchannels=PyLong_AsLong(PyTuple_GetItem(大小,2));
char my_arr[行*n通道*cols];

对于(sisixt长度=0;LangthAfAK,没有标准方法。你必须使用CV::Mat吗?例如,你可以调用CV::在C++中而不是Python中读取,并简单地把文件名字符串传递给C++而不是矩阵。在返回端,你可以返回CV::MAT作为数组,并在接口中从它中构造一个NUMPY NDAREX。ANK KMASH;主Req是从1 pyBund11接口传递到:C.:MeSeq从Python接口到另一个。你能告诉我如何从Python发送NoMPy NDAREL,并将它转移到CV::Mat C++中,你可以直接使用缓冲区。因此,将NUMPY数组改装成向量,并将一维数组连同维度一起传递给C++接口。+编码,同时使用从python传递的维度将1D数组转换为cv::Mat。从另一个方向(C++到python)反转该过程。您可能会发现这很有帮助:
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);

    ...
}