影象感興趣區域(roi)提取主要使用掩模來進行。掩模是二值影象,感興趣區域的掩模值設定為255,非感興趣區域的掩模值為0
獲取掩模的方法主要有兩種
方法一使用opencv中mat函式方法,呼叫mat(rect).setto方法設定掩模
mat mat::operator()( const rect& roi ) const
//呼叫mat(rect).setto方法
mask(rect).setto(255);
方法二在全為0的原始掩模中畫乙個封閉區域,使用漫水填充演算法填充封閉區域,將封閉區域的值都設定為255,實現掩模的提取
方法三將邊界轉換為輪廓,使用cv::drawcontours(mask, contours, -1, cv::scalar::all(255),cv_filled);
函式提取感興趣區域(roi)。
下文對矩形、橢圓,有方向的矩形,輪廓進行提取
使用方法一對矩形感興趣區域進行提取示例**如下:
#include#includeusing namespace cv;
//方法1,假如區域為長方形,使用mat 建構函式設定區域內的值為255
int main()
思路:
1)新建乙個值全為零的掩模影象(全是黑的,值為0)
2)在掩模影象上用白色畫出矩形的邊界(邊界值為255)
3)選取矩形的中心作為種子點,使用漫水填充演算法將矩形的內部填充為白色(255),最後得到掩模影象,使用掩模實現感興趣區域提取。
#include#includeusing namespace cv;
int main()
cvboxpoints(box, point); //計算二維盒子頂點
cvpoint pt[4];
for (i = 0; i<4; i++)
cvline(img, pt[0], pt[1], cvscalar(255), 2, 8, 0);
cvline(img, pt[1], pt[2], cvscalar(255), 2, 8, 0);
cvline(img, pt[2], pt[3], cvscalar(255), 2, 8, 0);
cvline(img, pt[3], pt[0], cvscalar(255), 2, 8, 0);
}//方法3.在掩模影象中畫旋轉的矩形(cvbox2d)、橢圓(rotatedrect)、圓,使用漫水填充演算法將幾何圖形內部的值設定為255
int main()
point* prepoint = (point*)cvgetseqelem(seq, 0);
point* lastpoint = (point*)cvgetseqelem(seq, seq->total - 1);
cv::line(grayimage, *prepoint, *lastpoint,cvscalar(255), 1, 8, 0);
for (int i = 1; itotal; i++)
}//方法4,假如區域邊界為輪廓,使用掩模影象中畫輪廓,使用漫水填充演算法將幾何圖形內部的值設定為255
int main()
(2)將邊界轉換為輪廓,使用cv::drawcontours(mask, contours, -1, cv::scalar::all(255),cv_filled);
函式提取感興趣區域(roi)
**如下:
#include #include#include#include using namespace cv;
using namespace std;
int main()
注意:drawcontours方法也是通用的提取感興趣區域的方法 openCV任意幾何形狀感興趣區域(ROI)提取
影象感興趣區域 roi 提取主要使用掩模來進行。掩模是二值影象,感興趣區域的掩模值設定為255,非感興趣區域的掩模值為0 獲取掩模的方法主要有兩種 方法一 使用opencv中mat函式方法,呼叫mat rect setto方法設定掩模 mat mat operator const rect roi ...
Opencv感興趣區處理
用roi來增加某範圍的畫素值 include include ch3 ex3 12 image name x y width height add int main iplimage src cvnamedwindow example3 12 pre cv window autosize cvnam...
opencv學習之感興趣區域(ROI)
新手學習就是苦啊,好多東西都要一點點的摸索,之前的經驗太少,積累太少,許多問題太簡單了,問別人都不好開口,誰讓自己太low了啊!那就自己折騰唄 今天看了opencv的矩陣和影象操作部分內容,這裡把這折騰的過程弄上來了 書上給了兩種獲得感興趣矩形區域的方式 乙個是直接用函式 cvsetimageroi...