Mat 和 Mat1b/Mat3b 之间的转换
conversion between Mat and Mat1b/Mat3b
我想将我的代码匹配到给定的界面中。在我的 class OperateImage 中,我使用 cv::Mat 格式的所有方法。当把它放在使用 cv::Mat3b 和 returns cv::Mat1b 的 SubMain 函数中时,它不起作用。我怎样才能改变它以便我可以使用我写的 class?我确信必须存在简单的转换,但是我没有找到,我从 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
和Mat3b
只是Mat
类型的两个pre-defined例,在core.hpp
中定义如下:
typedef Mat_<uchar> Mat1b;
...
typedef Mat_<Vec3b> Mat3b;
也就是说,Mat 和 Mat1b
/Mat3b
之间的转换应该相当 natural/automatic:
Mat1b mat1b;
Mat3b mat3b;
Mat mat;
mat = mat1b;
mat = mat3b;
mat1b = mat;
mat3b = mat;
回到你的情况,你的问题不应该归因于他们的转换,而是你定义 SubMain()
的方式以及你如何使用它。 SubMain()
的输入参数是一个 const cv::Mat3b &
,但是,您试图修改它的 header 以将其更改为函数内部的 Mat1b
。
改成例如:
就好了
cv::Mat1b SubMain(const cv::Mat3b& img)
{
cv::Mat tmp = img.clone();
OperateImage opImg(tmp);
opImg.Trafo(tmp);
return tmp;
}
我想将我的代码匹配到给定的界面中。在我的 class OperateImage 中,我使用 cv::Mat 格式的所有方法。当把它放在使用 cv::Mat3b 和 returns cv::Mat1b 的 SubMain 函数中时,它不起作用。我怎样才能改变它以便我可以使用我写的 class?我确信必须存在简单的转换,但是我没有找到,我从 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
和Mat3b
只是Mat
类型的两个pre-defined例,在core.hpp
中定义如下:
typedef Mat_<uchar> Mat1b;
...
typedef Mat_<Vec3b> Mat3b;
也就是说,Mat 和 Mat1b
/Mat3b
之间的转换应该相当 natural/automatic:
Mat1b mat1b;
Mat3b mat3b;
Mat mat;
mat = mat1b;
mat = mat3b;
mat1b = mat;
mat3b = mat;
回到你的情况,你的问题不应该归因于他们的转换,而是你定义 SubMain()
的方式以及你如何使用它。 SubMain()
的输入参数是一个 const cv::Mat3b &
,但是,您试图修改它的 header 以将其更改为函数内部的 Mat1b
。
改成例如:
就好了cv::Mat1b SubMain(const cv::Mat3b& img)
{
cv::Mat tmp = img.clone();
OperateImage opImg(tmp);
opImg.Trafo(tmp);
return tmp;
}