将 Mat 参数从 Python 传递给 c++ 方法
Passing Mat arguement from Python to c++ method
我试图从我的opencv python代码中将参数传递给(c ++ opencv)
我完成的步骤:
- 使用 SWIG 为我的 opencv C++ 程序生成 .so 文件
- 编写了一个示例 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
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 初始化具有非默认构造函数的std::数组项的更好方法