![](/img/trans.png)
[英]C++ - Error: expected type-specifier while creating C wrapper for OpenCV's cv::Scalar::all
[英]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.