OpenCV-C++;-如何将cv::Scalar转换为在C包装中返回cv::Scalar的指针? 我正在使用OpenCV 3的Arjun Comar版本…Arjun Comar更新了OpenCV的这个版本来自动生成所有OpenCV函数的C包装,所以没有好的C++ FFI的语言仍然可以为OpenCV创建包装。C++的C包装器位于文件OpenCv.EngalDistal.CPP(必须由上面链接的Arjun Comar OpenCV版本构建),但粘贴了我当前的版本,这里的MAT.CPP Re.CPP Posi.CPP和SiZ.CPP位于此处

OpenCV-C++;-如何将cv::Scalar转换为在C包装中返回cv::Scalar的指针? 我正在使用OpenCV 3的Arjun Comar版本…Arjun Comar更新了OpenCV的这个版本来自动生成所有OpenCV函数的C包装,所以没有好的C++ FFI的语言仍然可以为OpenCV创建包装。C++的C包装器位于文件OpenCv.EngalDistal.CPP(必须由上面链接的Arjun Comar OpenCV版本构建),但粘贴了我当前的版本,这里的MAT.CPP Re.CPP Posi.CPP和SiZ.CPP位于此处,c++,function,opencv,wrapper,C++,Function,Opencv,Wrapper,在该版本中,他使用标量指针(“标量*”)来代表所有需要“cv::Scalar(val1 val2 val3 val4)”的函数。唯一的问题是他没有创建标量函数或任何替代方法来创建标量*。我的尝试如下所示,并且没有编译 cpp 水电站 在UbuntuTrusty上的cpp目录中编译 'g++ -Wall -shared -fPIC -o opencv-glue.so opencv-glue.cpp' 但我得到了这个错误 opencv-glue.cpp: In function ‘cv::Sca

在该版本中,他使用标量指针(“标量*”)来代表所有需要“cv::Scalar(val1 val2 val3 val4)”的函数。唯一的问题是他没有创建标量函数或任何替代方法来创建标量*。我的尝试如下所示,并且没有编译

cpp

水电站

在UbuntuTrusty上的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]
  }
因此,我将有一个标量传递给Arjun Comar创建的“absdiff”函数c包装器 在这里:


非常感谢任何帮助=)

显然,由于转换,它无法编译,但您不能动态创建新的标量吗?您只需记住,此内存必须通过删除来释放

 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);
 }

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

非常感谢,我错过了,它编译了…祝您愉快=)
 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]
  }
 Mat* cv_create_Mat_S(Size* size, int type, Scalar* s) {
      return new Mat(*size, type, *s);
  }
  void cv_absdiff(Mat* src1, Mat* src2, Mat* dst) {
        cv::absdiff(*src1, *src2, *dst);
  }
 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);
 }