目前在学习怎么提取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()函数中的四个参数,前两个可以看作是坐标,用于定位到我们所需感兴趣区域矩阵的左上角的地方,而后面两个参数描述的是待提取的矩阵的长(行数)和宽(列数)。
继续总而言之,感觉自己就是一个傻子哦。。
时间: 2024-10-08 10:43:56