Mat 和 Mat1b/Mat3b 之间的转换

2023-12-01

我想将我的代码匹配到给定的接口。在我的 OperateImage 类的所有方法中,我使用 cv::Mat 格式。当将其放入使用 cv::Mat3b 并返回 cv::Mat1b 的 SubMain 函数时,它不起作用。我该如何更改它以便我可以使用我的书面课程?我确信一定存在简单的转换,但是我没有找到,我是从 opencv 开始的。预先感谢您的帮助。如果有人能很快指出何时使用 Mat1b/Mat3b 而不是 Mat 有意义,我们将非常感激,他们的作用是什么? (我总是看到使用 Mat 的例子。)

cv::Mat1b SubMain(const cv::Mat3b& img)
{
    OperateImage opImg(img);
    opImg.Trafo(img); // being used as reference in my methods
    return img;
}

Mat1b and Mat3b只是两个预定义的情况Mat类型,定义在core.hpp如下:

typedef Mat_<uchar> Mat1b;
...
typedef Mat_<Vec3b> Mat3b;

也就是说,Mat 和Mat1b/Mat3b应该是非常自然/自动的:

Mat1b mat1b;
Mat3b mat3b;
Mat mat;

mat = mat1b;
mat = mat3b;
mat1b = mat;
mat3b = mat;

回到你的案例,你的问题不应该归因于它们的转换,而是你定义的方式SubMain()以及你如何使用它。输入参数为SubMain() is a const cv::Mat3b &,但是,您正在尝试修改其标头以将其更改为Mat1b函数内部。

如果你改成这样就好了,例如:

cv::Mat1b SubMain(const cv::Mat3b& img)
{
    cv::Mat tmp = img.clone();

    OperateImage opImg(tmp);
    opImg.Trafo(tmp);
    return tmp;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mat 和 Mat1b/Mat3b 之间的转换 的相关文章

随机推荐