java - 如何在 Swig 中为非原始数据类型创建包装器?

标签 java c++ opencv swig

我做了什么:

我在我的 ubuntu 机器上安装了 swig 3.0.5。 为 C++ 代码创建了 Java、python、android、C# 包装器并对其进行了测试。它运作良好。

我的问题是什么? 我不知道如何使用 Swig 为非原始数据类型创建 python、java 等包装器?

1.下面是示例cpp文件

example.cpp

  #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <iostream>

    using namespace cv;
    using namespace std;

    Mat sample(Mat image)
    {


      //  Mat image;
     //   image = imread("MyPic.jpg",1);   // Read the file

        if(! image.data )                              // Check for invalid input
        {
            cout <<  "Could not open or find the image" << std::endl ;
            return -1;
        }

      rectangle(image,Point(200,250),Point(500,600),Scalar(255,0,0));
           return image;
    }

2.下面的代码是接口(interface)文件

示例.i

%module example

%{
/* Put header files here or function declarations like below */



extern Mat sample(Mat image);

%}



extern Mat sample(Mat image);

如何在 Swig 中为非原始数据类型创建包装器?

最佳答案

您必须将您的 Mat 转换为由 SWIG 生成的 SWIGTYPE_p_Mat:

// Read your image
Mat imgSrc = Highgui.imread("source_img.jpg");      
// Convert to Swig Object
SWIGTYPE_p_Mat swigMatIn = new SWIGTYPE_p_Mat(imgSrc.nativeObj, true);
// Call the function
SWIGTYPE_p_Mat swigMatOut = example.sample(swigMatIn);
// Convert the result to Mat from Swig Obj
Mat resultMat = new Mat(SWIGTYPE_p_Mat.getCPtr(swigMatOut));
// Write to disk
Highgui.imwrite("target_img.jpg", resultMat);

'example' 是由 SWIG (example.java) 生成的类:

...
public static SWIGTYPE_p_Mat sample(SWIGTYPE_p_Mat arg0) {
return new SWIGTYPE_p_Mat(symbolsdetectJNI.sample(SWIGTYPE_p_Mat.getCPtr(arg0)), true); }
...

关于java - 如何在 Swig 中为非原始数据类型创建包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28808975/

相关文章:

java - 向 Swagger UI 添加基本身份验证

java - 从 ShutdownHook 调用非静态方法

python - 如何对 python 图像(使用 numpy、opencv 或 PIL)的每个 PIXEL(不是每个 rgb 组件!)应用操作?

python - 使用 OpenCV 和 Python 计算图像上的特殊元素

java - Gremlin:从 EdgeId 获取进出顶点,包括边属性

java - 禁用阶段按钮 X

python - swig c++ 到 python 通过引用返回 unsigned char*

c++ - 重载函数的调用不明确(两个函数在不同的范围内)

c++ - 重载提取和插入 << >> 运算符 c++

Java - OpenCV java.lang.NoClassDefFoundError 异常