函数语法: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(src, ksize, dst, anchor, borderType)
参数 |
解释 |
src |
输入矩阵 |
ksize |
注意这里是int型。若为大于1的奇数,则窗口大小为ksize × ksize |
dst |
输出矩阵 |
anchor(可选) |
锚点 |
borderType(可选) |
边界扩充类型 |
函数语法:GaussianBlur(src, ksize, sigmaX, dst, sigmaY, borderType)
参数 | 解释 |
Src |
输入图像矩阵 |
ksize |
滤波窗口(卷积核)尺寸 |
dst |
输出矩阵 |
sigmaX(可选) |
一维水平方向卷积核标准差 |
sigmaY(可选) |
一维竖直方向卷积核标准差 |
borderType(可选) |
边界扩充类型 |
函数语法:medianBlur(src, ksize, dst)
参数 | 解释 |
Src |
图像矩阵 |
ksize |
滤波窗口尺寸 |
Dst |
输出矩阵 |
函数语法: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( 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(image, threshold1, threshole2, edges, apertureSize, L2gradient)
参数 |
解释 |
image |
输入图像 |
threshold1 |
低阈值 |
threshold2 |
高阈值 |
Edges(可选) |
输出边缘强度图像 |
apertureSize(可选) |
Sobel核的窗口大小,默认3×3 |
L2gradient(可选) |
计算总的边缘强度时使用的方式,值为true时代表使用的是平方和开方的方式,值为false代表使用的是绝对值和的方式。 |
函数语法: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()
函数语法:ret, dst = cv2.threshold(src, thresh, maxval, type)
参数 | 解释 |
src |
输入图,只能输入单通道图像,通常来说为灰度图 |
dst | 输出图 |
thresh | 阈值 |
maxval | 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值 |
type | 二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY:超过阈值部分取maxval(最大值),否则取0 cv2.THRESH_BINARY_INV:THRESH_BINARY的反转 cv2.THRESH_TRUNC:大于阈值部分设为阈值,否则不变 cv2.THRESH_TOZERO:大于阈值部分不改变,否则设为0 cv2.THRESH_TOZERO_INV:THRESH_TOZERO的反转 |