相关疑难解决方法(0)

为使用OpenCV的C++代码编写Python绑定

我正在尝试为一些使用OpenCV的C++代码编写一个python包装器,但是我很难将结果(一个OpenCV C++ Mat对象)返回给python解释器.

我查看了OpenCV的源代码,发现文件cv2.cpp具有转换函数,可以在PyObject*和OpenCV的Mat之间来回执行转换.我使用了那些转换函数,但在我尝试使用它们时遇到了分段错误.

我基本上需要一些关于如何使用OpenCV来连接python和C++代码的建议/示例代码/在线参考,特别是能够将OpenCV的C++ Mat返回给python解释器,或者可能建议如何/从何处开始调查原因分段错误.

目前我正在使用Boost Python来包装代码.

在此先感谢任何回复.

相关代码:

// This is the function that is giving the segmentation fault.
PyObject* ABC::doSomething(PyObject* image)
{
    Mat m;
    pyopencv_to(image, m);  // This line gives segmentation fault.

    // Some code to create cppObj from CPP library that uses OpenCV
    cv::Mat processedImage = cppObj->align(m);

    return pyopencv_from(processedImage);
}
Run Code Online (Sandbox Code Playgroud)

从OpenCV的源代码转换函数如下.转换代码在带有"if(!PyArray_Check(o))..."的注释行中给出了分段错误.

static int pyopencv_to(const PyObject* o, Mat& m, const char* name = "<unknown>", bool allowND=true)
{
    if(!o || o == Py_None)
    {
        if( !m.data )
            m.allocator …
Run Code Online (Sandbox Code Playgroud)

c++ python boost opencv boost-python

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

从Python访问OpenCV CUDA函数(无PyCUDA)

我正在编写一个Python应用程序,它使用OpenCV的Python绑定来进行标记检测和其他图像处理.我想使用OpenCV的CUDA模块来CUDA加速我的应用程序的某些部分,并在他们的.hpp文件中注意到他们似乎正在使用Python和Java的OpenCV导出宏.但是,即使我正在构建OpenCV,我似乎也无法访问这些CUDA功能WITH_CUDA=ON.

是否有必要使用诸如PyCUDA之类的包装器来访问GPU功能,例如cudaarithm中的阈值?或者,如果我在Python代码中调用cv2.threshold()(而不是常规的基于CPU的实现),这些CUDA加速函数是否已被使用?

CV_EXPORTS double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type, Stream& stream = Stream::Null());
Run Code Online (Sandbox Code Playgroud)

我看到的子模块cv2如下:

  • 错误
  • aruco
  • 详情
  • 鱼眼镜头
  • FLANN
  • INSTR
  • 毫升
  • OCL
  • OGL
  • videostab

cv2.cuda,cv2.gpu和cv2.cudaarithm所有回归AttributeError.

我正在运行以构建OpenCV的CMake指令如下:

cmake -DOPENCV_EXTRA_MODULES_PATH=/usr/local/lib/opencv_contrib/modules/ \
    -D WITH_CUDA=ON -D CUDA_FAST_MATH=1 \
    -D ENABLE_PRECOMPILED_HEADERS=OFF \
    -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF \
    -D BUILD_opencv_java=OFF \
    -DBUILD_opencv_bgsegm=OFF -DBUILD_opencv_bioinspired=OFF -DBUILD_opencv_ccalib=OFF -DBUILD_opencv_cnn_3dobj=OFF -DBUILD_opencv_contrib_world=OFF -DBUILD_opencv_cvv=OFF -DBUILD_opencv_datasets=OFF -DBUILD_openc
v_dnn=OFF -DBUILD_opencv_dnns_easily_fooled=OFF -DBUILD_opencv_dpm=OFF -DBUILD_opencv_face=OFF -DBUILD_opencv_fuzzy=OFF …
Run Code Online (Sandbox Code Playgroud)

c++ python opencv cuda

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

从c ++函数Cython返回包含PyObject的复杂对象

我试图使用Cython将一些C++类和函数包装到Python中.到目前为止,我已经包装了2个类,现在我想要包装一个函数.

函数的签名是

std::map<std::string, std::vector<PyObject*>> analyze(PyObject* img, LandmarkDetector::CLNF& clnf_model, LandmarkDetector::FaceModelParameters& params);

我已成功包装CLNF和FaceModelParameters类,我在包装此analyze函数时遇到问题.

该函数处理PyObject*s因为它处理opencv,我希望能够在语言之间轻松传递它们.我正在使用这些函数来执行cv::Pointpython对象之间和python Mat之间的转换cv::Mat.

这是我的pyx文件:

from libcpp.vector cimport vector
from libcpp.map cimport map
from libcpp.string cimport string
from cpython.ref cimport PyObject
from cython.operator cimport dereference as deref

cdef extern from "LandmarkDetectorModel.h" namespace "LandmarkDetector":
    cdef cppclass CLNF:
        CLNF(string) except +

cdef extern from "LandmarkDetectorParameters.h" namespace "LandmarkDetector":
    cdef cppclass FaceModelParameters:
        FaceModelParameters(vector[string] &) except +

cdef class PyCLNF:
    cdef CLNF …
Run Code Online (Sandbox Code Playgroud)

c++ python cython cythonize

6
推荐指数
1
解决办法
728
查看次数

标签 统计

c++ ×3

python ×3

opencv ×2

boost ×1

boost-python ×1

cuda ×1

cython ×1

cythonize ×1