繁体   English   中英

如何在C ++文件中使用opencv函数并将其与Python绑定?

[英]How to use opencv functions in C++ file and bind it with Python?

我想将图像从python脚本传递到c ++代码以进行opencv计算。 为了绑定两者,我遵循了这一点 绑定工作正常,但是当我使用任何opencv内置函数时,都会出现错误。

追溯(最近一次通话):import pbcvt#中的文件“ /home/prashant/Desktop/example.py”,第1行,模块,也是不带扩展名ImportError的已编译动态库文件的名称:/ usr /local/lib/python2.7/dist-packages/pbcvt.so:未定义符号:_ZN2cv8cvtColorERKNS_11_InputArrayERKNS_12_OutputArrayEii

我正在使用opencv 3.1和python 2.7。非常感谢您提供帮助/指导。

代码供参考。 Python文件。

import pbcvt 
import numpy as np
import cv2
a = cv2.imread("/home/prashant/Documents/opencv-practice/screenshot.png")
c = pbcvt.dot(a)
cv2.imshow("gray image",c)
cv2.waitKey(0)
cv2.destroyAllWindows()

C ++代码:

#include <pyboostcvconverter/pyboostcvconverter.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
namespace pbcvt {
using namespace std;

using namespace boost::python;
cv::Mat dot(PyObject *image) {

    cv::Mat matImage, greyMat;
    matImage = pbcvt::fromNDArrayToMat(image);
    cv::cvtColor(matImage, greyMat, CV_BGR2GRAY);
    return greyMat;
}
cv::Mat dot2(cv::Mat leftMat, cv::Mat rightMat) {
    auto c1 = leftMat.cols, r2 = rightMat.rows;
    if (c1 != r2) {
        PyErr_SetString(PyExc_TypeError,
                        "Incompatible sizes for matrix multiplication.");
        throw_error_already_set();
    }
    cv::Mat result = leftMat * rightMat;

    return result;
}


#if (PY_VERSION_HEX >= 0x03000000)
    static void *init_ar() {
#else
    static void init_ar(){
#endif
    Py_Initialize();

    import_array();
    return NUMPY_IMPORT_ARRAY_RETVAL;
}

BOOST_PYTHON_MODULE (pbcvt) {
    //using namespace XM;
    init_ar();

    //initialize converters
    to_python_converter<cv::Mat,
            pbcvt::matToNDArrayBoostConverter>();
    pbcvt::matFromNDArrayBoostConverter();

    //expose module-level functions
    def("dot", dot);
    def("dot2", dot2);

    }

} //end namespace pbcvt

可能是您必须在第27行中编辑CMakeLists.txt find_package(OpenCV COMPONENTS core REQUIRED)并添加更多组件,例如find_package(OpenCV COMPONENTS core imgproc highgui REQUIRED)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM