簡體   English   中英

OpenCV-C ++-如何轉換cv :: Scalar以在C包裝程序中為cv :: Scalar返回指針?

[英]OpenCV - C++ - How do Convert a cv::Scalar to return a pointer in a C wrapper for cv::Scalar?

我在這里使用OpenCV 3.0的Arjun Comar版本https://github.com/arjuncomar/opencv ... Arjun Comar更新了此版本的OpenCV以自動為所有OpenCV函數生成C包裝器,因此沒有良好c ++ FFI的語言仍然可以為OpenCV創建包裝器。 C ++的C包裝程序位於文件opencv_genic.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)'的函數。 唯一的事情是他沒有創建create Scalar函數或創建Scalar *的任何替代方法。 我的嘗試在下面並且未編譯

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

因此,我將有一個標量傳遞給在這里創建的“抽象”函數c包裝器Arjun Comar:

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

任何幫助都感激不盡=)

顯然,它由於轉換而無法編譯,但是您是否不能動態地創建新的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);
 }

如果要返回指向該對象的指針,則必須采用這種方式。 您不能通過創建副本來返回新對象,而必須更改方法簽名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM