暴露C++;返回C++;对象到Python 我写了一个C++,它的函数返回一个OpenCV的CV::DNN对象。我想向Python代码公开这个函数。我尝试使用cType,但在学习它不支持C++类之后放弃了。这就是我的工作 /
暴露C++;返回C++;对象到Python暴露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++,它的函数返回一个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的指针,并公开了可以访问底层网络对象的成员方法。