1. 程式人生 > >python-OpenCV之API的使用

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()