为什么OpenCV C ++接口中的某些函数中包含结构声明?

时间:2013-11-21 02:30:28

标签: c++ c opencv

我在this page上看到了这两个类似/相同的功能  在CvSVM::train标题下

C++: bool CvSVM::train(const Mat& trainData, const Mat& responses, 
const Mat& varIdx=Mat(), const Mat& sampleIdx=Mat(), CvSVMParams 
params=CvSVMParams() )

C++: bool CvSVM::train(const CvMat* trainData, const CvMat* responses, 
const CvMat* varIdx=0, const CvMat* sampleIdx=0, CvSVMParams params=CvSVMParams() )

它们相同但只使用const Mat&和其他CvMat*

我正在为OpenCV编写一个包装器,我想知道是否要完成它:

  • 我是否需要包含所有C结构?
  • 或者C ++可以使用C结构吗?
  • 或者是CvMat和其他结构C和C ++?

我的印象是C ++在OpenCV中使用了类和C结构,但如果有人能够阐明这一点我会很感激。

同样在OpenCV cpp samples文件夹letter_recog.cpp中,还有很多CvMat *。代码刚刚更新的Rs还没有更新?

Opencv docs说CvMat已被弃用。

  • 所以上面两个函数应该只使用const Mat&一个?
  • 并假设OpenCv文档虽然在网站上发布仍然可能有点“在过程中”?

1 个答案:

答案 0 :(得分:1)

CvMat版本仅用于连接旧代码。 CvSVM内部使用CvMat,因此上面的第一个函数只是将Mat参数转换为CvMat并将它们传递给第二个函数。

我不确定“为OpenCV编写包装器”是什么意思,但除非您明确需要使用CvMat,否则只使用Mat。一旦你在你的包装器中包含CvMat并且有人使用它,就很难在以后摆脱它。