相关疑难解决方法(0)

通过Cython将numpy数组传递给C++方法并返回

在这个网站上有很多关于在cython中使用numpy的问题,一个特别有用的问题是使用cython 简单包装C代码.

但是,cython/numpy接口api 似乎有所改变,特别是在确保内存连续数组的传递方面.

在cython中编写包装函数的最佳方法是:

  • 采用一个可能但不一定是连续的numpy数组
  • 使用签名调用C++类方法 double* data_in, double* data_out
  • 返回double*该方法写入的numpy数组?

我的尝试如下:

cimport numpy as np
import numpy as np # as suggested by jorgeca

cdef extern from "myclass.h":
    cdef cppclass MyClass:
        MyClass() except +
        void run(double* X, int N, int D, double* Y)

def run(np.ndarray[np.double_t, ndim=2] X):
    cdef int N, D
    N = X.shape[0]
    D = X.shape[1]

    cdef np.ndarray[np.double_t, ndim=1, mode="c"] X_c
    X_c = np.ascontiguousarray(X, dtype=np.double)

    cdef np.ndarray[np.double_t, ndim=1, mode="c"] Y_c
    Y_c = np.ascontiguousarray(np.zeros((N*D,)), …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy cython

25
推荐指数
1
解决办法
1万
查看次数

将 OpenCv Mat 从 C++ 传递到 Python

我需要将 OpenCv 图像从 C++ 发送到 Python 以对其进行一些处理。Mat 将通过代码接收,但为简单起见,我在这里使用 imread 来解决这个问题。

我在代码的 C++ 部分所做的是:

#include <Python.h>
#include <arrayobject.h>
#include <iostream>
#include <opencv2/opencv.hpp>


#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION


using namespace cv;
using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Mat image = imread("test.jpg");

    Py_Initialize();
    PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;

    pName = PyUnicode_FromString("prog");
    if (pName == NULL)
    {
        PyErr_Print();
        return 0;
    }

    pModule = PyImport_Import(pName);
    if (pModule == NULL)
    {
        PyErr_Print();
        return 0;
    }
    pDict = PyModule_GetDict(pModule);
    pFunc = …
Run Code Online (Sandbox Code Playgroud)

c++ python opencv

7
推荐指数
1
解决办法
4303
查看次数

标签 统计

python ×2

arrays ×1

c++ ×1

cython ×1

numpy ×1

opencv ×1