暴露C++;返回C++;对象到Python 我写了一个C++,它的函数返回一个OpenCV的CV::DNN对象。我想向Python代码公开这个函数。我尝试使用cType,但在学习它不支持C++类之后放弃了。这就是我的工作 /

暴露C++;返回C++;对象到Python 我写了一个C++,它的函数返回一个OpenCV的CV::DNN对象。我想向Python代码公开这个函数。我尝试使用cType,但在学习它不支持C++类之后放弃了。这就是我的工作 /,python,c++,opencv,boost,Python,C++,Opencv,Boost,暴露C++;返回C++;对象到Python 我写了一个C++,它的函数返回一个OpenCV的CV::DNN对象。我想向Python代码公开这个函数。我尝试使用cType,但在学习它不支持C++类之后放弃了。这就是我的工作 //function definition cv::dnn::Net TestCall(char* config_path, char* model_path) { cout << config_path <<

暴露C++;返回C++;对象到Python

我写了一个C++,它的函数返回一个OpenCV的CV::DNN对象。我想向Python代码公开这个函数。我尝试使用cType,但在学习它不支持C++类之后放弃了。这就是我的工作

//function definition
cv::dnn::Net TestCall(char* config_path, char* model_path) {

    cout << config_path << endl;
    cout << model_path << endl;
    cv::dnn::Net net = cv::dnn::readNetFromDarknet((cv::String)config_path, (cv::String)model_path);
    cout << "net init successful" << endl;
    net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
    net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
    cout << "backend set ok" << endl;

    return net;
}

//exposing function to Python
BOOST_PYTHON_MODULE(testdll2) {

    using namespace cv;
    using namespace std;
    namespace py = boost::python;
    namespace np = boost::python::numpy;

    boost::python::def("TestCall", TestCall);
}

-------------------------------------------------------------------
# Python call
import testdll

testdll.TestCall('config.cfg', 'model.weights')

-------------------------------------------------------------------

config.cfg
model.weights
net init successful
backend set ok
Traceback (most recent call last):
  File "centroid_correct.py", line 707, in Correct
    model = testdll2.TestCall(self.config_path, self.model_path)
TypeError: No to_python (by-value) converter found for C++ type: class cv::dnn::dnn4_v20191202::Net

//函数定义
cv::dnn::Net TestCall(char*config\u路径,char*model\u路径){

您可能想做的是用C++代码创建Python对象,它存储指向CV::DNN:NET的指针,并公开了可以访问底层网络对象的成员方法。