现在的位置: 首页 > 综合 > 正文

OpenCV中的提取子矩阵的函数

2018年02月19日 ⁄ 综合 ⁄ 共 555字 ⁄ 字号 评论关闭

自从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()就可以啦。

抱歉!评论已关闭.