关于openCV中Rect()的解释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于openCV中Rect()的解释相关的知识,希望对你有一定的参考价值。

目前在学习怎么提取Mat类中的感兴趣区域,看到了一个函数叫Rect(),里面可以放四个参数,

举个列子

创建一个单通道的矩阵,尺寸大小为10*10

Mat img(10, 10, CV_8UC1);  

使用迭代器将像素初始化为1-100

MatIterator_<uchar>imgit, imgend;
    int i = 1;
    for (imgit = img.begin<uchar>(), imgend = img.end<uchar>(); imgit != imgend; ++imgit)
    {
        (*imgit) = i;
        i++;
    }

此时如果输出img,结果如下

技术分享

现在进入正题,使用Rect()提取感兴趣区域

Mat roi(img, Rect(0, 0, 10, 10));

解释这个代码:重新定义了一个Mat类名字叫做roi,用其来存储从img中提取的感兴趣区域。Rect()中有4个参数,比如在这里,就是(0,0,10,10),代表的意思是,我们先定位到(0,0)这个像素点,然后以这个点为基准,划出一个10*10的矩形,将此矩形包含的数据像素点存到roi中去。运行结果如下(实际上提取出了全部的数据矩阵):

技术分享

如果我们改变Rect()函数内部参数的值为(1,3,4,6),代码如下

Mat roi(img, Rect(1, 3, 4, 6));

上面这条语句描述的是,我们以坐标为(1, 3)的像素点为基准(数值为32),提取出一个长(行数)为4, 宽(列)为6的数据矩阵,运行结果如下:

技术分享

 

 总之,Rect()函数中的四个参数,前两个可以看作是坐标,用于定位到我们所需感兴趣区域矩阵的左上角的地方,而后面两个参数描述的是待提取的矩阵的长(行数)和宽(列数)。

 

继续总而言之,感觉自己就是一个傻子哦。。

 

以上是关于关于openCV中Rect()的解释的主要内容,如果未能解决你的问题,请参考以下文章

在opencv中连接向量Rect [重复]

关于opencv图片坐标系的理解

如何在opencv2中手动编写Roi函数

OpenCV-C++选择提取感兴趣区域(ROI区域)附用鼠标选取ROI区域的代码

OpenCV中Rect矩阵类

如何在 openCV 中找到 Rect 对象的角?