将 Mat 参数从 Python 传递给 c++ 方法

Passing Mat arguement from Python to c++ method

本文关键字:c++ 方法 Python Mat 参数      更新时间:2023-10-16

我试图从我的opencv python代码中将参数传递给(c ++ opencv)

我完成的步骤:

  1. 使用 SWIG 为我的 opencv C++ 程序生成 .so 文件
  2. 编写了一个示例 Opencv Python 程序

A.为我的 opencv C++ 代码生成 .so

1. swig -c++ -python opencvtest.i

2 .g++ -fpic -c opencvtest.cpp opencvtest_wrap.cxx -I/usr/include/python2.7 -I/usr/local/include -I/usr/local/include/opencv -I/usr/local/include/opencv2

3. g++ -shared opencvtest.o opencvtest_wrap.o -o _opencvtest.so -L/usr/local/lib /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgcodecs.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_shape.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_superres.so /usr/local/lib/libopencv_ts.a /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videoio.so /usr/local/lib/libopencv_videostab.so

4.C++ 代码

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int sample(Mat image,Mat &out)
{
 int z=0;
    if(! image.data )                              // Check for invalid input
   {
       cout <<  "Could not open or find the image" << std::endl ;

   }
  cvtColor(image, out,COLOR_BGR2GRAY);
                                 // Wait for a keystroke in the window
    return z;
}

5.创建了包装文件(opencvtest_wrap.cxx)和生成的.so文件。

6.调用C++代码的示例python代码。

 import cv2 , numpy
    import opencvtest
image = cv2.imread('messi5.jpg',0)
    res=opencvtest.sample(image , image1)
    cv2.imshow('Source Image',image)
    cv2.waitKey(0)
    cv2.namedWindow('dst_rt', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('dst_rt', window_width, window_height)
    cv2.imshow('dst_rt', image1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    print res

当我尝试在我的机器上执行 sample.py 时收到此错误

回溯(最近一次调用):

文件"sample1.py",第 15 行,在 res=opencvtest.sample(image , image1)

类型

错误:在方法"sample"中,类型为"cv::Mat"的参数 1

任何一位专家都可以帮助我解决问题。

什么是image?我认为您必须使用来自C++:opencvtest.Mat

的类型