移植:opencv 2.4.3 -> opencv 3.1.,未在此范围内声明 cvGetMat

portation: opencv 2.4.3 -> opencv 3.1., cvGetMat was not declared in this scope

我目前正在尝试将基于 opencv 2.x 的代码移植到 opencv 3.x(高于 3.1)。在这段代码中,使用了一个函数,即 cvGetMat(...)。由于opencv3.x中不存在这个函数,我需要一个合适的替换。有谁知道,如何正确替换此功能?我已经在 opencv 文档和此处的 Whosebug 上寻找过它,但找不到任何东西。

这是使用此函数的代码片段

void cvCanny3(  const void* srcarr, void* dstarr,
            void* dxarr, void* dyarr,
            int aperture_size )
{


CvMat srcstub, *src = cvGetMat( srcarr, &srcstub );
CvMat dststub, *dst = cvGetMat( dstarr, &dststub );

CvMat dxstub, *dx = cvGetMat( dxarr, &dxstub );
CvMat dystub, *dy = cvGetMat( dyarr, &dystub );
...
...
...
}

当我 运行 这段代码时,我只是按预期收到以下错误:

‘cvGetMat’ was not declared in this scope CvMat srcstub, *src = cvGetMat( srcarr, &srcstub ); ^~~~~~~~

cvGetMat 来自旧的基于 C 的接口(它从原始 C 数组创建一个 CvMat 对象),您应该将代码转换为较新的 C++ 接口并使其使用 cv::Mat 类型(包装你的 src_addr C 数组到 C++ cv::Mat 实例)。

例如,您对 cvGetMat 的调用应替换为 cv::Mat 变量声明。

cv::Mat src(num_rows, num_cols, src_type, src_arr);

num_rowsnum_colssrc_type 确定 src_arr 数组的大小和语义。可能,您将不得不在 src_arr 输入上删除 'const' 修饰符。

有关详细信息,请参阅 cv::Mat 参考资料。

所有 cvFunctionName 调用通常在 'cv::' 命名空间中都有它们的 C++ 对应项。例如,cvRemap 将变为 cv::remap