opencv3 編程入門學習筆記(一): 基本函數介紹


濾波

blur (均值濾波)

均值濾波是典型的線性濾波算法, 主要方法為領域平均法(即用一片圖像區域的各個像素的平均值來代替原圖像中的各個像素值)

缺點: 不能很好的保護圖像細節, 在圖像去噪的同時也破壞了圖像的細節部分,從而使圖像變得模糊。

函數原型: 

void blur(InputArray src, OutputArrary dst, Size ksize , Point anchor=Point(-1, -1), int borderType = BORDER_DEFAULT)

ksize : 核大小(kerneal size ), 有點類似卷積核

 

閾值化

閾值可以被視為最簡單的圖像分割方法(基於圖像中物體與背景之間的灰度差異)。 

為了從圖像中提取我們需要的部分, 應該用圖像中的每一個像素點的灰度值與選取的閾值進行比較,並進行相應的判斷。一旦找到了需要分割的物體的像素點,可以對這些像素點設定一些特定的值來表示。可以將物體的像素點的灰度值設為 ”0“ (黑色), 其他像素點的灰度值為 ”255“ (白色)

threshold (固定閾值操作)

對灰度圖像進行閾值操作,得到二值圖像

double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)

src: 輸入單通道數組

dst: 處理后的結果

thresh: 閾值的具體值

maxval: 當像素值滿足條件時,給該像素賦的值

type : CV_THRESH_BINARY 、CV_THRESH_BINARY、CV_THRESH_BINARY_INV

 

 

尋找輪廓

findContours(InputArray img, OutputArray conours, OutputArray hierarchy, int mode, int method, Point offset=Point()) 

img: 輸入圖像, 需要為8 位 單通道圖像 

contours: 每個輪廓為一組點向量

hierarchy:  

mode: 輪廓檢索模式,。 詳細介紹如下 

 method: 輪廓的近似辦法

 CHAIN_APPROX_NONE :  獲取每個輪廓的每個像素, 相鄰的兩個點的像素位置不超過 1

CHAIN_APPROX_SIMPLE: 壓縮水平方向, 垂直方向, 對角線方向的元素(一個矩形只需要 4 個點來保存輪廓信息)

 

 morphologyEx

沒有

 

仿射變換

在向量中進行一次線性變換(乘以一個矩陣) 並加上一個平移(加上一個向量), 變換為另一個向量的過程。

warpAffine(InputArray src,  OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar & borderValue = Scalar())

通過轉換矩陣轉換   dst(x,y) = src(M11x + M12y + M13, M21x + M22y + M23)

 參數:

src: 輸入圖像矩陣

dst: 輸出圖像矩陣

M : 2 x 3 轉換矩陣

dsize:  輸出圖像尺寸

flags:  插值算法標識符(默認  INTER_LINEAR )

平移: 

// 偏移矩陣 2 x 3, 類型 float32
Mat transformMat = Mat::eye(2, 3, CV_32F);
int m = max(w, h);

transformMat.at<float>(0, 2) = m / 2 - w / 2;  // x 方向偏移值
transformMat.at<float>(1, 2) = m / 2 - h / 2;  // y 方向偏移值

Mat warpImage(m, m, in.type());
warpAffine(in, warpImage, transformMat, warpImage.size(), INTER_LINEAR, BORDER_CONSTANT, Scalar(0));

獲取旋轉矩陣

getRotationMatrix2D(Point2f center, double angle, double scale)

center: 矩陣中心

angle : 旋轉角度

scale : 比例

 

獲取點向量圍成的最小矩陣

Rect rect = boudingRect (inputArray points)

 

創建一個指定大小和類型的尺寸

 Mat::eye  (int rows, int cols, int type)

 

 

膨脹與腐蝕:

這兩個操作都是對圖像中  高亮(白色) 區域而言, 膨脹則高亮區域增大, 腐蝕則高亮區域變小,暗黑區域變多(黑色區域增大)。

 

開運算與閉合運算

開運算: 分開對象。 相當於對圖像先進行腐蝕運算再進行膨脹運算,可以消除離散點和"毛刺",可以將兩個物體分開。
閉運算: 連接相鄰對象。 相當於對圖像先進行膨脹運算再進行腐蝕運行,可以填充圖像的內部孔洞和圖像的凹角點,可以把兩個鄰近的目標連接起來。

morphologyEx(const Mat &src, Mat &dst, int op, Mat kernel, Point anchor=Point(-1,-1), int iterations=1)

 op:  MORPH_OPEN(開運算)、MORPH_CLOSE(閉運算)、MORPH_GRADIENT (形態學梯度)、 MORPH_TOPHAT (頂帽)

kernel:  運算內核,配合getStructuringElement函數使用

 

getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1))

shape: MORPH_RECT、MORPH_CORSS、MORPH_ELLIPSE(橢圓形);

size : 一般取 Size(3,3)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM