python進階—OpenCV之常用影象操作函式說明
文章目錄
- cv2.threshold
- cv2.bitwise_and
- cv2.bitwise_or
- cv2.bitwise_not
- cv2.inRange
- cv2.resize
- cv2.adaptiveThreshold
- cv2.warpAffine仿射
- cv2.getRotationMatrix2D
- cv2.warpPerspective投射
- cv2.getAffineTransform
- cv2.getPerspectiveTransform
經過近一個月的學習,發現對影象的一些基本操作函式還是理解的不夠透徹,因此覺得把一些常用的影象操作函式拿出來加深理解並記錄下很有必要,方便以後查詢。
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個進行
|
- 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個頂點座標
好了,就先記錄這幾個,由於本篇主要用於總結函式的用途,以及引數的含義,並不涉及具體的數學知識,所以數學上的解釋需要參考其他部落格。以後若發現一些我不太記得住的函式,再繼續新增。