python進階—OpenCV之常用圖像操作函數說明


經過近一個月的學習,發現對圖像的一些基本操作函數還是理解的不夠透徹,因此覺得把一些常用的圖像操作函數拿出來加深理解並記錄下很有必要,方便以後查詢。

cv2.threshold

函數原型:threshold(src, thresh, maxval, type, dst=None)獲取二值化圖像;一般用於灰度圖圖像的二值化

  • 函數返回值:ret,dst;該函數有兩個返回值,ret是用type爲THRESH_OTSU或者THRESH_TRIANGLE方法計算出的閾值;dst是閾值化後的圖像
  • src:輸入的待二值化圖像
  • thresh:閾值,可由參數指定;或者由type參數確定計算方法
  • maxval:像素最大取值
  • type:THRESH_BINARY、THRESH_BINARY_INV、THRESH_TOZERO、THRESH_TOZERO_INV、THRESH_TRUNC;另外THRESH_OTSU、THRESH_TRIANGLE爲閾值計算方法,可與前5個進行|運算後賦值給type參數
  • THRESH_BINARY:像素值 < thresh,像素值取爲0;像素值 > thresh,像素值取爲maxval
  • THRESH_BINARY_INV:像素值 < thresh,像素值取爲maxval;像素值 > thresh,像素值取爲0
  • THRESH_TOZERO:像素值 < thresh,像素值取爲0;像素值 > thresh,像素值保持不變
  • THRESH_TOZERO_INV:像素值 < thresh,像素值保持不變;像素值 > thresh,像素值取爲0
  • THRESH_TRUNC:像素值 < thresh,像素值保持不變;像素值 > thresh,像素值取爲maxval
  • THRESH_OTSU:用於具有(圖像的像素直方圖)雙波峯的灰度圖像的二值化
  • THRESH_TRIANGLE:用於具有(圖像的像素直方圖)單波峯的灰度圖像的二值化

cv2.bitwise_and

函數原型:bitwise_and(src1, src2, dst=None, mask=None)

  • 函數返回值:調用時若無mask參數則返回src1 & src2,若存在mask參數,則返回src1 & src2 & mask
  • src1:輸入原圖1
  • src2:輸入原圖2,src1與src2可以相同也可以不相同,可以是灰度圖像也可以是彩色圖像
  • dst:若存在參數時:src1 & src2 或者 src1 & src2 & mask
  • mask:可以是單通道8bit灰度圖像,也可以是矩陣,一般爲二值化後的圖像

cv2.bitwise_or

函數原型:bitwise_or(src1, src2, dst=None, mask=None)

  • 函數返回值:調用時若無mask參數則返回src1 | src2,若存在mask參數,則返回src1 | src2 | mask
  • src1:輸入原圖1
  • src2:輸入原圖2,src1與src2可以相同也可以不相同,可以是灰度圖像也可以是彩色圖像
  • dst:若存在參數時:src1 | src2 或者 src1 | src2 | mask
  • mask:可以是單通道8bit灰度圖像,也可以是矩陣,一般爲二值化後的圖像

cv2.bitwise_not

函數原型:bitwise_not(src, dst=None, mask=None)

  • 函數返回值:調用時若無mask參數則返回按位取反回:~src1,若存在mask參數,則先做src1先做按位取反,然後按mask中bit=1的位取反
  • src1:輸入原圖1
  • dst:若存在參數時:與返回值相同
  • mask:可以是單通道8bit灰度圖像,也可以是矩陣,一般爲二值化後的圖像

cv2.inRange

函數原型:inRange(src, lowerb, upperb, dst=None)

  • 函數返回值:二值圖像
  • src:輸入原圖,可以爲單通道灰度圖像,也可以爲3通道彩色圖像
  • lowerb:像素值區間下限
  • upperb:像素值區間上限
  • dst:若存在參數,則與返回值相同
  • 說明:單通道灰度圖像,像素值低於lowerb和高於upperb的部分變成0,lower_red~upper_red之間的值變成255;三通道彩色圖像,則每個通道分別與lowerb、upperb比較,然後按照相同辦法修改像素值

cv2.resize

函數原型:cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)

  • 函數返回值:變換大小後的圖像
  • src:待變換輸入原圖,可以爲單通道灰度圖像,也可以爲3通道彩色圖像
  • dsize:變換後的圖像尺寸,格式:寬通道;當dsize爲0時,它可以通過以下公式計算得出:dsize = Size(round(fxsrc.cols), round(fysrc.rows))
    fx - 水平軸上的比例因子。當它爲0時,計算公式如下:(double)(dsize.width/src.cols)
    fy - 垂直軸上的比例因子。當它爲0時,計算公式如下:(double)(dsize.heifht/src.rows)
  • interpolation - 插值方法
  • interpolation取值:INTER_NEAREST - 最近鄰插值法
  • interpolation取值:INTER_LINEAR - 雙線性插值法(默認)
  • interpolation取值:INTER_AREA - 基於局部像素的重採樣(resampling using pixel area relation)。對於圖像抽取(image decimation)來說,這可能是一個更好的方法。但如果是放大圖像時,它和最近鄰法的效果類似。
  • interpolation取值:INTER_CUBIC - 基於4x4像素鄰域的3次插值法
  • interpolation取值:INTER_LANCZOS4 - 基於8x8像素鄰域的Lanczos插值
  • 注意:參數dsize和參數(fx, fy)不能夠同時爲0

cv2.adaptiveThreshold

函數原型:cv2.adaptiveThreshold(src, maxval, thresh_type, type, blocksize, C),自適應閾值二值化

  • 函數返回:二值化後的圖像
  • src:輸入圖像,只能是單通道灰度圖像
  • maxval:當像素值超過了閾值(或者小於閾值,根據type來決定),所賦予的值,與函數cv2.threshold相同
  • thresh_type: 閾值的計算方法,包含以下2種類型:cv2.ADAPTIVE_THRESH_MEAN_C; cv2.ADAPTIVE_THRESH_GAUSSIAN_C
  • type:二值化操作的類型,與固定閾值函數相同,包含以下5種類型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
  • blocksize: 圖片中分塊的大小
  • C:閾值計算方法中的常數項

cv2.warpAffine仿射

函數原型:cv2.warpAffine(src, M, dsize, dst, flags, borderMode, borderValue)

  • 函數返回:仿射變換後的圖像
  • src:輸入圖像,可以爲單通道或彩色圖像
  • M:2*3仿射變換矩陣,矩陣格式[[1, 0, tx], [0, 1, ty]],也可由其它函數獲取
  • dsize:輸出圖像的大小
  • dst:仿射變換後的輸出圖像
  • flags:插值方法,默認爲 flags=cv2.INTER_LINEAR,表示線性插值,此外還有:cv2.INTER_NEAREST(最近鄰插值) cv2.INTER_AREA (區域插值) cv2.INTER_CUBIC(三次樣條插值) cv2.INTER_LANCZOS4(Lanczos插值)
  • borderMode:邊界模式,可參照OpenCV第二篇的中的各種border模式
  • borderValue:邊界像素大小
  • 一般在使用前三個參數

cv2.getRotationMatrix2D

函數原型:cv2.getRotationMatrix2D(center, angle, scale)

  • 返回值:返回一個2*3矩陣,主要用於cv2.warpAffine仿射變換
  • center:旋轉中心座標,是一個元組參數(col, row)
  • angle:旋轉角度,旋轉方向,逆時針
  • scale:方向比例
  • 此函數主要用於獲得一個旋轉矩陣

cv2.warpPerspective投射

函數原型:cv2.warpPerspective(src, M, dsize, dst, flags, borderMode, borderValue)

  • 函數返回:投射變換後的圖像
  • src:輸入圖像,可以爲單通道或彩色圖像
  • M:3*3投射變換矩陣,可由函數cv2.getPerspectiveTransform獲取
  • dsize:輸出圖像的大小
  • dst:仿射變換後的輸出圖像
  • flags:插值方法,默認爲 flags=cv2.INTER_LINEAR,表示線性插值,此外還有:cv2.INTER_NEAREST(最近鄰插值) cv2.INTER_AREA (區域插值) cv2.INTER_CUBIC(三次樣條插值) cv2.INTER_LANCZOS4(Lanczos插值)
  • borderMode:邊界模式,可參照OpenCV第二篇的中的各種border模式
  • borderValue:邊界像素大小
  • 一般在使用前三個參數

cv2.getAffineTransform

函數原型:cv2.getAffineTransform(src, dst)

  • 返回值:仿射變換2*3 矩陣
  • src:仿射變換原圖三角形的三個頂點座標
  • dst:仿射變換輸出圖像三角形的三個頂點座標

cv2.getPerspectiveTransform

函數原型:cv2.getPerspectiveTransform(src, dst)

  • 返回值:仿射變換3*3 矩陣
  • src:投射變換原圖矩形的4個頂點座標
  • dst:投射變換輸出圖像矩形的4個頂點座標

好了,就先記錄這幾個,由於本篇主要用於總結函數的用途,以及參數的含義,並不涉及具體的數學知識,所以數學上的解釋需要參考其他博客。以後若發現一些我不太記得住的函數,再繼續添加。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章