首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mat与Mat1b/Mat3b之间的转换

Mat与Mat1b/Mat3b之间的转换
EN

Stack Overflow用户
提问于 2015-06-14 15:20:00
回答 1查看 8.9K关注 0票数 5

我想将我的代码匹配到给定的接口中。在我的类OperateImage中,我使用cv::Mat格式的所有方法。当将它放入使用cv::Mat3b并返回cv::Mat1b的SubMain函数中时,它不工作。我怎样才能改变它,使我可以使用我的书面课程?我相信必须有简单的转换,但我没有发现,我是从opencv开始的。提前感谢您的帮助。如果有人能在短时间内指出使用Mat1b/Mat3b而不是Mat是有意义的话,我们会非常感激,他们的角色是什么?(我经常看到使用Mat的例子。)

代码语言:javascript
复制
cv::Mat1b SubMain(const cv::Mat3b& img)
{
    OperateImage opImg(img);
    opImg.Trafo(img); // being used as reference in my methods
    return img;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-15 09:16:49

Mat1bMat3b只是两种预定义的Mat类型,在core.hpp中定义如下:

代码语言:javascript
复制
typedef Mat_<uchar> Mat1b;
...
typedef Mat_<Vec3b> Mat3b;

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

代码语言:javascript
复制
Mat1b mat1b;
Mat3b mat3b;
Mat mat;

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

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

如果你把它改为:

代码语言:javascript
复制
cv::Mat1b SubMain(const cv::Mat3b& img)
{
    cv::Mat tmp = img.clone();

    OperateImage opImg(tmp);
    opImg.Trafo(tmp);
    return tmp;
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30831081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档