C++ Mat和Mat1b/Mat3b之间的转换
我想将我的代码匹配到给定的接口中。在我的类OperateImage中,我在所有方法中都使用cv::Mat格式。当将其放入使用cv::Mat3b并返回cv::Mat1b的Submin函数时,它不起作用。如何更改它,以便使用我的书面类?我相信一定有简单的转换,但我没有找到,我开始在opencv。事先谢谢你的帮助。如果有人能很快指出使用Mat1b/Mat3b代替Mat有意义时,他们将非常感激,他们的角色是什么? (我经常看到使用Mat的示例。)C++ Mat和Mat1b/Mat3b之间的转换,c++,opencv,image-processing,mat,C++,Opencv,Image Processing,Mat,我想将我的代码匹配到给定的接口中。在我的类OperateImage中,我在所有方法中都使用cv::Mat格式。当将其放入使用cv::Mat3b并返回cv::Mat1b的Submin函数时,它不起作用。如何更改它,以便使用我的书面类?我相信一定有简单的转换,但我没有找到,我开始在opencv。事先谢谢你的帮助。如果有人能很快指出使用Mat1b/Mat3b代替Mat有意义时,他们将非常感激,他们的角色是什么? (我经常看到使用Mat的示例。) Mat1b和Mat3b只是Mat类型的两个预定义案例,在
Mat1b
和Mat3b
只是Mat
类型的两个预定义案例,在core.hpp
中定义如下:
typedef Mat_<uchar> Mat1b;
...
typedef Mat_<Vec3b> Mat3b;
回到您的案例,您的问题不应该归咎于它们的转换,而应该归咎于您定义
submin()
的方式以及如何使用它。submin()
的输入参数是一个const cv::Mat3b&
,但是,您试图修改它的头,将其更改为函数内部的Mat1b
如果您将其更改为,例如:
cv::Mat1b SubMain(const cv::Mat3b& img)
{
cv::Mat tmp = img.clone();
OperateImage opImg(tmp);
opImg.Trafo(tmp);
return tmp;
}
有人能回答:“……当使用Mat1b/Mat3b而不是Mat有意义时,他们的作用是什么?(我经常看到使用Mat的例子。)”@herohuyongtao当我们可以简单地使用
Mat
时,使用Mat1b
的意义是什么?您使用的硬类型越多,编译器就会为您捕获越多的错误。此外,不能将图像(行、列)与cv::Mat、CVT颜色(rgb、灰色、cv::COLOR_BGR2GRAY);//请注意,这还考虑了权重。。。
Mat1b mat1b;
Mat3b mat3b;
Mat mat;
mat = mat1b;
mat = mat3b;
mat1b = mat;
mat3b = mat;
cv::Mat1b SubMain(const cv::Mat3b& img)
{
cv::Mat tmp = img.clone();
OperateImage opImg(tmp);
opImg.Trafo(tmp);
return tmp;
}