OpenCv --- 图像处理函数(手册版本)

当前版本 :opencv-python      4.8.1.78           ps:0黑  255白

阈值处理

1.阈值处理

retval,dst = cv2.threshold(src, thresh, maxval, type)

参数说明:

src : 传入图像对象(可以是灰度图或是三色通道图) :UMat

thresh : 阈值,取值范围0-255 :float

maxval : 取值0-255,高于(低于,二者取谁主要有type决定)阈值的点置 为maxval:float

type : 二值化操作的类型主要有以下5种:

        cv2.THRESH_BINARY:大于thresh部分置为maxval,小于部分置为0
        cv2.THRESH_BINARY_INV :与前反(INV),大于thresh部分置为0,小于部分置为maxval
        cv2.THRESH_TRUNC :对大于阈值的像素进行截断处理,高于阈值的部分置为thresh,此时maxval为无效数值(但是得写上啊,不然会报错)
        cv2.THRESH_TOZERO:对小于阈值的像素值设置为0。
        cv2.THRESH_TOZERO_INV:对大于阈值的像素值设置为0

返回值:

 dst :处理后的图像对象 : UMat

 ret:表示是否成功执行阈值处理的标志位。如果处理成功,则返回阈值;否则返回0。

2.自适应阈值

dist = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst])

PS:自适应阈值算法的核心就是将图像分割成不同的区域,每个区域都计算阈值

参数说明:

src :    输入图片对象(必须是灰度图)  :UMat

maxValue :超过阈值的部分取此数值 : float

adaptiveMethod :自适应方法(产生阈值),常见的有如下两种:
        cv2.ADAPTIVE_THRESH_MEAN_C:该方法根据像素邻域的灰度值的均值来计算阈值。这个阈值被用来决定每个像素是归属于前景(设定为maxValue)还是背景(设定为0)
        cv2.ADAPTIVE_THRESH_GAUSSIAN_C:基于高斯加权平均来计算阈值的。具体来说,每一个像素的阈值是根据其自身和周围邻域的像素值以高斯分布的形式来计算的(更泛用)

thresholdType:阈值类型(详细见阈值处理中type 参数

blockSize:邻域大小 : int

C:加权系数,每个区域计算后的阈值基础上减去C就是最终阈值(可以为负数) : float

dst:输出图像 :UMat

返回值:

 dst :处理后的图像对象 : UMat

形态学处理

1.腐蚀:

简单来说就是我选择一个核形状(核可以是矩阵、椭圆、三角、十字等等形状),假设是一个3*3的方块,核心是其中二行二列的点,如果除了核心之外,所有都是0,那么就将这个核也变成0(即使他是255)

retval,dst = cv2.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

参数说明:

src :    输入图片对象  :UMat

kernel :腐蚀使用的核(结构元素) : UMat

dst :输出图像,与输入图像大小和类型相同。如果提供了此参数,则直接在输出图像上进行操作,否则会创建一个新的图像  : UMat

anchor:可选参数,核的锚定位置,默认值为(-1, -1),表示锚点位于结构元素的中心

iterations:可选参数,腐蚀操作的迭代次数,默认为1

borderType:可选参数变界样式,默认:cv2.BORDER_CONSTANT,主要有以下几种:        

        cv2.BORDER_CONSTANT:边界外像素的值设置为borderValue。
        cv2.BORDER_REPLICATE:边界外像素的值复制自边界内的像素。
        cv2.BORDER_REFLECT:边界外像素的值取边界内像素值的镜像。
        cv2.BORDER_WRAP:边界外像素的值取环绕边界的第一个像素的值。

borderValue:边界处理方式为cv2.BORDER_CONSTANT时,边界外像素的值

返回值:

 dst :处理后的图像对象 : UMat

 retval :表示是否成功执行阈值处理的标志位。如果处理成功,则返回非零值;否则返回0

轮廓处理

轮廓捕捉

有两个版本,不带有contours的会有两个返回值,而带有contours的会直接将修改传入该参数,返回修改后的值

contours,hierarchy = cv2.findContours(image, mode, method)
cv2.findContours(image, mode, method, contours)

参数说明:

image :    输入的二值图像,可以用上述阈值处理获取  :UMat

mode :轮廓检索模式,通常使用以下几种:
         cv2.RETR_EXTERNAL:只检测最外层的轮廓。
        cv2.RETR_LIST:检测所有轮廓,并将它们存储在一个列表中。
        cv2.RETR_CCOMP:检测所有轮廓,并分别存储顶层和底层轮廓。
        cv2.RETR_TREE:检测所有轮廓,并将它们存储在一个树形结构中

method :轮廓逼近方法,可以是以下几种:
        cv2.CHAIN_APPROX_NONE:存储所有轮廓点。
        cv2.CHAIN_APPROX_SIMPLE:仅存储轮廓的端点。
        cv2.CHAIN_APPROX_TC89_L1:使用Teh-Chin链近似算法。
        cv2.CHAIN_APPROX_TC89_KCOS:使用Teh-Chin链近似算法。

contours :参数对象

返回值:

 contours :轮廓列表

 hierarchy :层次结构

描绘轮廓

img = drawContours(image: UMat, contours: typing.Sequence[UMat], contourIdx: int, color: cv2.typing.Scalar, thickness: int = ..., lineType: int = ..., hierarchy: UMat | None = ..., maxLevel: int = ..., offset: cv2.typing.Point = ...) -> UMat: ...

参数说明:

image :    输入图像(可以任意通道数)  :UMat

contours :轮廓列表:

contourIdx:需要绘制的轮廓的索引,-1表示全部绘制:

color:轮廓颜色,以BGR格式表示(255,0,0)就是蓝色

thickness :线条粗细,-1表示填充轮廓内部

lineType:线条类型
        cv2.LINE_8:8连通分量。
        cv2.LINE_4:4连通分量。
        cv2.LINE_AA:抗锯齿线条。
        cv2.LINE_PIE:分段线。
        cv2.LINE_SP4:4分枝线条。
        cv2.LINE_SP8:8分枝线条。

hierarchy:轮廓层次结构(ps:只有在绘制单个轮廓的时候才需要提供,一旦使用,就必须提供contourIdx参数)

maxLevel:绘制的最大层数,默认为0,表示只绘制指定的轮廓。如果设置为1,则会绘制指定轮廓及其子轮廓;如果设置为2,则会绘制指定轮廓、其子轮廓和孙轮廓等。

返回值:

 img:绘制后的图像

滤波处理(平滑图像)

高斯滤波

cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) → dst

参数说明:

src: 输入图像,可以是任何数量的信道,但深度应为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F
(ps:图像深度:也就是图像的像素能用多少位来表示,譬如CV_16S:每个像素就会以 16 位有符号整数的形式存储)

dst: 输出图像,和输入图像大小一致

ksize: 高斯核大小,类似(n*m),注意n,m可以不相同,但是必须是正奇数

sigmX: X方向上的高斯核标准偏差

sigmY: Y方向上的高斯核标准偏差,如果值为0,则与sigmX相同,若两者均为0,则自动计算

borderType: 边界填充方法

双边滤波

dst = cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])

参数说明:

src:输入图像,可以是任何数量的信道。
dst:与 src 大小和类型相同的目标图像。
d:过滤期间使用的每个像素邻域的直径。 如果它是非正数,则从sigmaSpace 计算。
sigmaColor:是滤波处理时选取的颜色差值范围,该值决定了周围哪些像素点能够参与到滤波中来。与当前像素点的像素值差值小于 sigmaColor 的像素点,能够参与到当前的滤波中。该值越大,就说明周围有越多的像素点可以参与到运算中。该值为0时,滤波失去意义;该值为255时,指定直径内的所有点都能够参与运算。该值越小,对颜色变化越敏感。一般10左右。
sigmaSpace:在坐标空间中过滤 sigma。 较大的参数值意味着更远的像素将相互影响。 当 d>0 时,它指定邻域大小,而不考虑 sigmaSpace。 否则,d 与 sigmaSpace 成正比。一般而言可以从较小的值开始取,然后更具实际效果调整。一般10左右。

borderType:边界填充模式(可选

有空就继续补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渊兮旷兮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值