我想将我的代码匹配到给定的接口中。在我的类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;
}发布于 2015-06-15 09:16:49
Mat1b和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()的输入参数是一个const cv::Mat3b &,但是,您正在尝试修改它的头部,将其更改为函数中的Mat1b。
如果你把它改为:
cv::Mat1b SubMain(const cv::Mat3b& img)
{
cv::Mat tmp = img.clone();
OperateImage opImg(tmp);
opImg.Trafo(tmp);
return tmp;
}https://stackoverflow.com/questions/30831081
复制相似问题