目前在學習怎么提取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()函數中的四個參數,前兩個可以看作是坐標,用於定位到我們所需感興趣區域矩陣的左上角的地方,而后面兩個參數描述的是待提取的矩陣的長(行數)和寬(列數)。
繼續總而言之,感覺自己就是一個傻子哦。。