OpenCV(iOS)閾值化(15)

一個蘿蔔壹個坑發表於2018-01-03

對於各種圖形進行處理操作的過程中,我們常常需要對影象中的畫素做出取捨與決策,直接剔除一些低於或者是高於一定值得畫素。

閾值可以視為最簡單的影象的分割方法。比如從一幅影象中利用閾值分割出我們需要的物體部分(當然這裡的物體可以是一部分或者是整體)。這樣的影象分割方法基於影象中物體與背景之間的灰度差異,而且此分割屬於畫素的分割。為了從一幅影象中提取出我們需要的部分,應該用影象中的一個畫素點的灰度值與選取的閾值進行比較,並作出相應的判斷。

閾值化主要5種型別

普通灰度圖(圖中的藍色水平線代表著具體的一個閾值)

OpenCV(iOS)閾值化(15)

二進位制閾值化(圖中的藍色水平線代表著具體的一個閾值)

解釋:在運用該閾值型別的時候,先要選定一個特定的閾值量,比如:125,這樣,新的閾值產生規則可以解釋為大於125的畫素點的灰度值設定為最大值(如8位灰度值最大為255),灰度值小於125的畫素點的灰度值設定為0。

OpenCV(iOS)閾值化(15)

反二進位制閾值化

解釋:該閾值化與二進位制閾值化相似,先選定一個特定的灰度值作為閾值,不過最後的設定值相反。(在8位灰度圖中,例如大於閾值的設定為0,而小於該閾值的設定為255)。

OpenCV(iOS)閾值化(15)

截斷閾值化

解釋:同樣首先需要選定一個閾值,影象中大於該閾值的畫素點被設定為該閾值,小於該閾值的保持不變。(例如:閾值選取為125,那小於125的閾值不改變,大於125的灰度值(230)的畫素點就設定為該閾值)。

OpenCV(iOS)閾值化(15)

閾值化為0

解釋:先選定一個閾值,然後對影象做如下處理:1 畫素點的灰度值大於該閾值的不進行任何改變;2 畫素點的灰度值小於該閾值的,其灰度值全部變為0。

OpenCV(iOS)閾值化(15)

反閾值化為0

解釋:原理類似於0閾值,但是在對影象做處理的時候相反,即:畫素點的灰度值小於該閾值的不進行任何改變,而大於該閾值的部分,其灰度值全部變為0。

OpenCV(iOS)閾值化(15)

函式說明

固定閾值操作:threshold

使用threshold函式完成

double threshold(InputArray src,// 輸入的灰度影象

                            OutputArray dst,// 輸出處理影象

                             double thresh,// 閾值大小

                             double maxval,// 設定的最大灰度值(該引數運用在二進位制與反二進位制閾值操作中)

                              int type );// 閾值的型別(上面介紹的五中型別)

OpenCV(iOS)閾值化(15)


上述識別符號以次取值為0,1,2,3,4。

OpenCV(iOS)閾值化(15)


程式碼示例:

NSString*image =@"456.png";

UIImage*image1 = [UIImageimageNamed:image];

Matim;

UIImageToMat(image1, im);

if(im.empty()) {

return;

}

threshold(im,dst,125,125,CV_THRESH_BINARY);

self.secondImageView.image=MatToUIImage(dst);

自適應閾值操作函式:

void adaptiveThreshold( InputArray src, 

                                      OutputArray dst,

                                      double maxValue,

                                      int adaptiveMethod,

                                      int thresholdType,

                                      int blockSize,

                                      double C );

OpenCV(iOS)閾值化(15)
OpenCV(iOS)閾值化(15)

參考資料

OpenCV for iOS 學習筆記(十一)—— 基本的閾值操作

基本的閾值操作

相關文章