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

 

阈值分割

函数语法: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的反转

 

你可能感兴趣的:(python-OpenCV 之 常用API)