我正在尝试使用swig生成基于C ++的.SO文件和包装器。生成.SO是为了从python(Ubuntu Environment)调用。
如果我尝试使用Simple C ++代码,但是当我尝试使用OpenCV进行构建时,它会遇到一些问题。
opencvtest.cpp:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat image;
image = imread("/home/swigtest/MyPic.jpg",1); // Read the file
namedWindow( "Display window", WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", image ); // Show our image inside it.
destroyWindow("Display Window");
waitKey(0); // Wait for a keystroke in the window
return 0;
}
opencvtest.i
%module opencvtest
%{
/* Put header files here or function declarations like below */
extern int main();
%}
extern int main();
因此,对于完成以下步骤:
opencvtest.cpp - 我写的示例代码。
opencvtest.i - 我写的相应中间文件
执行命令:swig -c ++ -python opencvtest.i
GCC命令创建.o&#39; s(带包装器):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
创建.so的命令: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。所以/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。所以/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
6.Generated .so文件成功
然后尝试测试python,按照步骤:
7.python
8.&GT;&GT;&GT; import opencvtest
9.&GT;&GT;&GT; opencvtest.main()
我收到错误:分段错误(核心转储)
任何一位专家都可以帮助解决问题吗?
答案 0 :(得分:2)
刚刚在opencvtest.cpp中更改了方法名称main。
请记住,也请在步骤9更改方法名称。
这对我来说很好!。
但我不知道此方法调用背后的进程。
我将方法名称从main更改为。
在第9步:&gt;&gt;&gt; opencvtest.one()