1、cv::Rect()只能获取对象的拷贝,而不能获取对象的引用。因此,下面代码是无效的。并不能将image的值赋给image_m的rect区域。可以使用+=进行赋值,前提是你的image_m应该为全0。

image_m(cv::Rect(0,0,20,20)) = image;   //invalid!
image_m(cv::Rect(0,0,20,20)) += image;  //right!

2、reshape要求变换对象矩阵A是连续的cv::Mat B=A(Range(begin_row, end_row)等是不连续的Mat图像。如果想转为连续的,最简单的方法,就是将不连续的B 重新clone()一份给新的Mat。

image_m(cv::Rect(0,0,10,10)).reshape(0,100) // error!
image_m(cv::Rect(0,0,10,10)).clone().reshape(0,100) //rigth!

3、两个cv::Mat矩阵要进行数学运算,二者的数据类型必须相同。

4、使用cv::Mat的成员函数进行矩阵操作时,返回值是MatExpr类型,不能与Mat直接进行操作。一种方法是使用友元函数cv::add(input, output)等。另一种方法是Mat(MatExpr_),将MatExpr类型转为Mat。

Last modification:December 6th, 2020 at 04:21 pm
如果觉得我的文章对你有用,请随意赞赏