【问题标题】:portation: opencv 2.4.3 -> opencv 3.1., cvGetMat was not declared in this scope移植:opencv 2.4.3 -> opencv 3.1.,未在此范围内声明 cvGetMat
【发布时间】:2020-01-07 17:25:46
【问题描述】:

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

这是一个使用这个函数的代码片段

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’没有在这个范围内声明 CvMat srcstub, *src = cvGetMat(srcarr, &srcstub); ^~~~~~~~

【问题讨论】:

  • 您能否说明CvMat srcstub, *src = cvGetMat( srcarr, &srcstub ); 在新的cv::Mat 格式中的确切转换?我还是一头雾水

标签: c++ opencv3.1


【解决方案1】:

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 等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多