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

 

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

 

posted @ 2017-11-03 21:49  QianQiYing  阅读(3295)  评论(0编辑  收藏  举报