程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【OpenCV-Python-課程學習(賈)】OpenCV3.3課程學習筆記:圖像二值化的方法(inRange、threshold),圖像阈值處理

編輯:Python

一、圖像二值化——inRange()

inRange的語法如下

dst = inRange(src, upper, lower)

  • src是圖像數據
  • upper可以是單個數值,也可以是與src相同大小的數組,代表篩選范圍最高邊界
  • lower可以是單個數值,也可以是與src相同大小的數組,代表篩選范圍最低邊界
  • dst既可以寫進圓括號內,也可以作為函數的返回值被接收

API運行原理

如果圖像中的像素點數值在upper和lower定義的范圍之內,就在像素點所在位置返回255;反之不在范圍內就返回0。

二、提取特定顏色——inRange()

第一部分講了inRange()的工作原理,現在我們講講它的應用案例——提取圖像特定顏色,比如提取出圖像中的綠色。

我們需要知道綠色的三個通道各自取值范圍,網上有些文章已經總結了每一種顏色的各通道取值區間,舉個例子【OpenCV】HSV顏色識別-HSV基本顏色分量范圍 - 騰訊雲開發者社區。

我們可以發現,基本上在顏色空間HSV中,這樣的取值范圍才有意義;所以我們還需要用cvtColor()將其他顏色空間轉換成HSV顏色空間。

從表中我們可以看出綠色的最小邊界是[35, 43, 46],最大邊界是[77, 255, 255]。

因此我們可以寫成dst = inRange(src, np.array([35, 43, 46]), np.array([77, 255, 255])),來提取圖像src中的綠色區域,再執行src[dst==0] = 0後,得到的圖像除了綠色區域,其他部分都是黑色。

三、圖像阈值處理——threshold()

參考官方API文檔:OpenCV: Miscellaneous Image Transformations-Threshold()

圖像阈值處理是圖像二值化中的一種方法,圖像二值化不是說最後得到的像素值是0和1(倘若真的是0和1,顏色是全黑,顯然非此)。

直接給出API的語法格式。

cv.threshold(src, thresh, maxval, type[, dst]) ->retval, dst

  • src是圖像;雖然可以傳入多通道彩圖(這時候對各個通道單獨進行阈值處理),但不建議,灰度圖才是最適合阈值處理的。
  • thresh是阈值;如果像素值大於阈值就取maxval,否則取0;如果type中設置了自動獲取阈值的flag(cv.THRESH_OTSU和cv.THRESH_TRIANGLE),那麼thresh一般設置成255,這時不起任何作用。
  • maxval是最大填充值;最後得到的圖像像素值只有兩個,如果type是cv.THRESH_BINARY和cv.THRESH_BINARY_INV時,才會用到maxval,小的填充值是0,而大的填充值是maxval,一般設定成255(灰度圖——>白色)。
  • type有很多種,用來指定阈值化處理的類型;如果是二值化阈值處理就是cv.THRESH_BINARY和cv.THRESH_BINARY_INV,如果是截斷阈值處理就是cv.THRESH_TRUNC,如果是趨零阈值處理就是cv.THRESH_TOZERO和cv.THRESH_TOZERO_INV;此外還可以設置是否自動獲取阈值,對應的flag是cv.THRESH_OTSU和cv.THRESH_TRIANGLE,對應兩種自動獲取阈值的算法;上面提到的最後兩種type只能任選一個,同樣前面五種type也只能任選一個,一個正確的示例type=cv.THRESH_BINARY | cv.THRESH_OTSU,當然豎槓號也可換成加號。
  • retval是返回值,如果非自動獲取阈值,最後的retval和設定的thresh相等,而如果是自動獲取阈值,返回的是使用自動獲取阈值算法得到的阈值。
  • dst也即阈值化處理後的圖像結果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved