带有OpenCV和Cuda的接口Python和Cpp的问题

时间:2019-04-04 09:35:31

标签: python c++ opencv

在连接python和cpp时遇到问题。我需要使用GPU计算光流。为此,我将tvl1算法与opencv一起用于cpp和cuda。

我的cpp代码在GPU上运行良好,现在我想在python代码中调用该函数,因为无法通过Python上的这种算法在GPU上计算光流。

我正在使用ctypes来链接beetwin cpp和python。这是我的代码:

python

from ctypes import cdll
opencvfunc = cdll.LoadLibrary('opt_flow_lib/test.so')

cpp

//test.cpp

#define DLLEXPORT extern "C"

#include "opencv2/xfeatures2d.hpp"
#include "opencv2/cudaarithm.hpp"
#include "opencv2/cudaoptflow.hpp"
#include "opencv2/cudacodec.hpp"

#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

#include "opencv2/core/mat.hpp"

using namespace cv::cuda;
using namespace cv;

DLLEXPORT int tvl(int a, int b) {

  int bound = 20;

  Size new_size(224, 224);

  Mat curr_gray, prev_gray, prev_image, curr_image;
  Mat flow_x, flow_y;

  GpuMat d_frame_0, d_frame_1;
  GpuMat d_flow;

  cv::Ptr<cuda::OpticalFlowDual_TVL1> alg_tvl1 =           
        cuda::OpticalFlowDual_TVL1::create();

  return 3;
}

这是我构建cpp文件的方式:

gcc -o test.so -shared -fPIC test.cpp `pkg-config opencv --cflags --libs`

这是我启动python代码时所拥有的:

OSError: opt_flow_lib/test.so: undefined symbol:   _ZN2cv4cuda20OpticalFlowDual_TVL16createEdddiididdb

当我从cpp删除此行时:

cv::Ptr<cuda::OpticalFlowDual_TVL1> alg_tvl1 =           
            cuda::OpticalFlowDual_TVL1::create();

一切正常,我退回了3个整数。但似乎cuda不想做自己的工作

曾经使用ctypes和cpp / python的cuda开启过opencv的人可以帮助我吗?

谢谢

编辑:

让我的$ pkg-config opencv --cflags --libs也许有趣:

-I/usr/local/include/opencv4/opencv2 -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_xfeatures2d -lopencv_calib3d -lopencv_objdetect

0 个答案:

没有答案