自从OpenCV开始采用Mat格式,对于矩阵或图像的操作可以说是十分方便的,很多方法跟matlab也很相似。常常用到的一类操作是要提取一个图像或矩阵中的一部分,比如一行、一列、对角线、一个矩形区域等等。
1.【提取单行/列】
使用Mat::row(n)和Mat::col(n)可以直接返回第n行或第n列的矩阵头,这个是O(1)的操作,不会重新分配内存。
2.【提取多行/列】
OpenCV提供了Mat::rowRange(m,n)方法可以返回第[m,n)行,注意包括第m行,不包括第n行(都是从第0行开始计数);提取多列方法类似。
3.【提取矩形区域】
使用Mat::range()方法,注意范围仍然是左开右闭的。
4.【提取对角线】
OpenCV中提供了Mat::diag()方法,该方法的原型是:
C++: Mat Mat::diag(int d const)
C++: static Mat Mat::diag(const Mat& matD)
d: d=0则返回主对角线
d=1返回贴着主对角线上面的那一条,以此类推;
d=-1返回贴着主对角线下面的那一条,以此类推;
返回:以一个单列矩阵的形式返回主对角线,或主对角线方向上的数据。
如果我们要求副对角线怎么办呢?
直接翻转一下就好啦!使用cv::Flip()翻转矩阵,之后再调用diag()就可以啦。