python-OpenCV之API的使用
邊界擴充
函式語法copyMakeBorder (src, dst, top, bottom, left, right, borderType, value)
引數 |
解釋 |
Src |
輸入矩陣 |
Dst |
輸出矩陣,對src邊界擴充後的結果 |
Top |
上側擴充的行數 |
Bottom |
下側擴充的行數 |
Left |
左側擴充的行數 |
Right |
右側擴充的行數 |
borderType (邊界擴充型別) |
BORDER_CONSTANT:常數擴充 BORDER_REPLICATE:邊界複製 BORDER_REFLECT:反射擴充 BORDER_WRAP:平鋪擴充 BORDER_REFLECT_101:以邊界為中心反射擴充 BORDER_REFLECT101=BORDER_REFLECT_101 BORDER_DEFAULT=BORDER_REFLECT_101(這個經常是預設) |
Value |
borderType=BORDER_CONSTANT時填充的常數(或向量) |
程式碼示例
import cv2 as cv src1 = cv.imread("test.jpg") # 原始圖片 cv.namedWindow('window') cv.imshow('window', src1) # 複製-邊界擴充 img1 = cv.copyMakeBorder(src1, 50, 50, 50, 50, cv.BORDER_REPLICATE) cv.imshow('replicate', img1) # reflect,邊界反射擴充 img2 = cv.copyMakeBorder(src1, 50, 50, 50, 50, cv.BORDER_REFLECT) cv.imshow('reflect', img2) # consdent,常數擴充 img3 = cv.copyMakeBorder(src1, 50, 50, 50, 50, cv.BORDER_CONSTANT, value=[200, 200, 200]) cv.imshow('constent', img3) # wrap,平鋪擴充 img4 = cv.copyMakeBorder(src1, 50, 50, 50, 50, cv.BORDER_WRAP) cv.imshow('warp', img4) cv.waitKey() cv.destroyAllWindows()
影象平滑
blur—影象均值平滑濾波
函式語法:blur(src, ksize, dst, anchor, borderType)
引數 |
解釋 |
src |
輸入矩陣 |
ksize |
注意這裡是int型。若為大於1的奇數,則視窗大小為ksize × ksize |
dst |
輸出矩陣 |
anchor(可選) |
錨點 |
borderType(可選) |
邊界擴充型別 |
GaussianBlur—影象高斯平滑濾波
函式語法:GaussianBlur(src, ksize, sigmaX, dst, sigmaY, borderType)
Src |
輸入影象矩陣 |
ksize |
濾波視窗(卷積核)尺寸 |
dst |
輸出矩陣 |
sigmaX(可選) |
一維水平方向卷積核標準差 |
sigmaY(可選) |
一維豎直方向卷積核標準差 |
borderType(可選) |
邊界擴充型別 |
medianBlur—影象中值濾波
函式語法:medianBlur(src, ksize, dst)
Src |
影象矩陣 |
ksize |
濾波視窗尺寸 |
Dst |
輸出矩陣 |
bilateralFilter—影象雙邊濾波
函式語法:bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)
Src |
影象矩陣 |
d |
畫素鄰域直徑 |
sigmaColor |
相似性權重矩陣標準差 |
sigmaSpace |
空間距離權重標準差 |
borderType(可選) |
邊界擴充型別 |
程式碼示例:
import cv2 as cv
import numpy as np
# 原始圖片
image = cv.imread("test.jpg")
cv.imshow('originalImage', image)
cv.waitKey()
# 1、blur—影象均值平滑濾波
# 函式原型:blur(src, ksize, dst=None, anchor=None, borderType=None)
# src:影象矩陣
# ksize:濾波視窗(運算元)尺寸
# anchor:錨點
# borderType:邊界擴充型別
# np.hstack():在水平方向上平鋪
blurImage1 = np.hstack([cv.blur(image, (3, 3)), cv.blur(image, (5, 5)), cv.blur(image, (7, 7))])
cv.imshow('Averaged', blurImage1)
cv.waitKey()
cv.destroyWindow('Averaged')
# 2、GaussianBlur—影象高斯平滑濾波
# 函式原型:GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
# src:影象矩陣
# ksize:濾波視窗(卷積核)尺寸
# dst:輸出矩陣
# sigmaX:一維水平方向卷積核標準差
# sigmaY:一維豎直方向卷積核標準差
# borderType:邊界擴充型別
blurImage2 = np.hstack([cv.GaussianBlur(image, (3, 3), 0), cv.GaussianBlur(image, (5, 5), 0),
cv.GaussianBlur(image, (7, 7), 0)])
cv.imshow('Gaussian', blurImage2)
cv.waitKey()
cv.destroyWindow('Gaussian')
# 3、medianBlur—影象中值濾波
# 函式原型:medianBlur(src, ksize, dst=None)
# src:影象矩陣
# ksize:濾波視窗尺寸
# dst:輸出矩陣
blurImage3 = np.hstack([cv.medianBlur(image, 3), cv.medianBlur(image, 5), cv.medianBlur(image, 7)])
cv.imshow('Median', blurImage3)
cv.waitKey()
cv.destroyWindow('Median')
# 4、bilateralFilter—影象雙邊濾波
# 函式原型:bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
# src:影象矩陣
# d:畫素鄰域直徑
# sigmaColor:相似性權重矩陣標準差
# sigmaSpace:空間距離權重標準差
blurImage3 = np.hstack([cv.bilateralFilter(image, 5, 21, 21), cv.bilateralFilter(image, 7, 31, 31),
cv.bilateralFilter(image, 9, 41, 41)])
cv.imshow('Bilateral', blurImage3)
cv.waitKey()
cv.destroyAllWindows()
邊緣檢測
Sobel邊緣檢測
函式語法:Sobel( src, ddepth, dx, dy, ksize, scale, borderType)
引數 |
解釋 |
src |
輸入矩陣 |
ddepth |
輸出矩陣的資料型別 |
dx |
當dx ≠ 0時,src與差分方向為水平方向上的Sobel核卷積 |
dy |
當dx = 0,dy ≠ 0時,src與差分方向為垂直方向上的Sobel核卷積 |
ksize |
Sobel核的尺寸,值為1,3,5,7 |
Scale(可選) |
比例係數 |
Delta(可選) |
平移係數 |
borderType(可選) |
邊界擴充型別 |
Canny邊緣檢測
函式語法:Canny(image, threshold1, threshole2, edges, apertureSize, L2gradient)
引數 |
解釋 |
image |
輸入影象 |
threshold1 |
低閾值 |
threshold2 |
高閾值 |
Edges(可選) |
輸出邊緣強度影象 |
apertureSize(可選) |
Sobel核的視窗大小,預設3×3 |
L2gradient(可選) |
計算總的邊緣強度時使用的方式,值為true時代表使用的是平方和開方的方式,值為false代表使用的是絕對值和的方式。 |
Laplacian邊緣檢測
函式語法:placian(src, dst, ddepth, ksize, scale, delta, borderType )
引數 |
解釋 |
src |
輸入矩陣 |
dst |
輸出矩陣 |
ddepth |
輸出矩陣的資料型別(位深) |
Ksize(可選) |
Laplacian核的型別 |
Scale(可選) |
比例係數 |
delta(可選) |
平移係數 |
borderType(可選) |
邊界擴充型別 |
程式碼示例:
import cv2 as cv
src = cv.imread('test5.jpg', flags=0)
cv.imshow('original_image', src)
# Sobels運算元
sobel_x = cv.Sobel(src, cv.CV_8U, dx=1, dy=0, ksize=3)
cv.imshow('sobel_x', sobel_x)
sobel_y = cv.Sobel(src, cv.CV_8U, dx=0, dy=1, ksize=3)
cv.imshow('sobel_y', sobel_y)
sobel_xy2 = cv.Sobel(src, cv.CV_8U, dx=1, dy=1, ksize=3)
cv.imshow('sobel_xy', sobel_xy2)
# Canny邊緣檢測
Canny = cv.Canny(src, threshold1=40, threshold2=180)
cv.imshow('Canny', Canny)
# Laplacian邊緣檢測
laplacian = cv.Laplacian(src, cv.CV_8U)
cv.imshow('Laplacian', laplacian)
cv.waitKey()
cv.destroyAllWindows()