OpenCV - C ++ - 如何转换cv :: Scalar在cv :: Scalar的C包装器中返回指针?

时间:2014-03-08 21:56:09

标签: c++ function opencv wrapper

我正在使用Arjun Comar版本的OpenCV 3.0 https://github.com/arjuncomar/opencv ... Arjun Comar更新了此版本的OpenCV以自动生成所有OpenCV函数的C包装器,因此没有良好的c ++ FFI的语言仍然可以创建OpenCV的包装器。 C ++的C包装器位于文件opencv_generated.cpp中(必须使用上面链接的Arjun Comar OpenCV版本构建,但我在此处粘贴了当前版本http://www.heypasteit.com/clip/17SI和mat.cpp rect.cpp point.cpp和size。 cpp位于https://github.com/arjuncomar/opencv/tree/master/modules/c/src

在那个版本中,他使用标量指针('Scalar *')代替所有需要'cv :: Scalar(val1 val2 val3 val4)'的函数。唯一的事情是他没有创建一个创建标量函数或任何替代创建标量*。我的尝试在下面而且没有编译

CPP

 Scalar* cv_create_Scalar(double val0, double val1, double val2, double val3)
 {
      //also tried cv:;Scalar - same error
     return Scalar(val0, val1, val2, val3);

 }

HPP

'Scalar* cv_create_Scalar(double val0, double val1, double val2, double val3);'

在Ubuntu Trusty

上的cpp目录中编译
'g++ -Wall -shared -fPIC -o opencv-glue.so opencv-glue.cpp'

但是我收到了这个错误

 opencv-glue.cpp: In function ‘cv::Scalar* cv_create_Scalar
 (double, double, double, double)’:
 opencv-glue.cpp:28:41: error: cannot convert 
 ‘cv::Scalar’ to ‘cv::Scalar* {aka cv::Scalar_<double>*}’ in return
      return Scalar(val0, val1, val2, val3);
                                     ^
 opencv-glue.cpp:30:1: warning: control reaches end of 
 non-void function [-Wreturn-type]
  }

我知道它不是编译函数...经过充分测试但我需要一个Scalar *传递给我创建的函数(编译正确)

 Mat* cv_create_Mat_S(Size* size, int type, Scalar* s) {
      return new Mat(*size, type, *s);
  }

所以我将有一个标量传递给'absdiff'函数c包装器Arjun Comar创建 这里:

  void cv_absdiff(Mat* src1, Mat* src2, Mat* dst) {
        cv::absdiff(*src1, *src2, *dst);
  }

任何帮助都是很多感谢=)

1 个答案:

答案 0 :(得分:1)

显然,由于转换无法编译,但是你不能动态创建新的Scalar吗?你只需要记住,必须通过删除来释放这个内存。

 Scalar* cv_create_Scalar(double val0, double val1, double val2, double val3)
 {
      //also tried cv:;Scalar - same error
     return new Scalar(val0, val1, val2, val3);
 }

如果要返回指向此对象的指针,则必须以这种方式完成。您无法通过创建副本来返回新对象,您必须更改方法签名。