OpenCV(python)一键入门--第九篇(快速边缘滤波&自定义滤波)

举报
拓佑豪 发表于 2021/07/24 15:32:20 2021/07/24
【摘要】 快速边缘滤波&自定义滤波

1:快速的图像边缘滤波算法

因为高斯双边,mean shift主要使用的五维向量计算
其计算量较大、运行速度慢,无法实时完成图像边缘保留滤波。

“快速的图像边缘滤波”适合实时图像边缘保留滤波。
通过等价变换到低纬度的空间
实现数据降维与快速计算

import cv2 as cv
import numpy as np

src = cv.imread("ma.jpg")
cv.imshow("input", src)

h, w = src.shape[:2]
dst = cv.edgePreservingFilter(src, sigma_s=100, sigma_r=0.4, flags=cv.RECURS_FILTER)

#dst	= cv.edgePreservingFilter(	src[, dst[, flags[, sigma_s[, sigma_r]]]])
#sigma_s的取值范围为0~200, sigma_r的取值范围为0~1
#当sigma_s取值不变时,sigma_r越大,图像滤波效果越明显
#当sigma_r取值不变时,窗口sigma_s越大,图像模糊效果越明显
#当sgma_r取值很小时,窗口sigma_s无论取何值,图像双边滤波效果都差

cv.imshow("dst",dst)

cv.waitKey(0)
cv.destroyAllWindows()

效果如下:

2:自定义滤波器

也就是自定义卷积核实现自定义滤波

import cv2 as cv
import numpy as np
#自定义滤波器
src = cv.imread("ma.jpg")
cv.imshow("input", src)

#以下是三种效果较好的自定义滤波器
#分别实现  均值模糊  锐化  梯度
blur_op = np.ones([5, 5], dtype=np.float32)/25.
shape_op = np.array([[0, -1, 0],
                    [-1, 5, -1],
                    [0, -1, 0]], np.float32)
grad_op = np.array([[1, 0],
                    [0, -1]], dtype=np.float32)

dst1 = cv.filter2D(src, -1, blur_op)
dst2 = cv.filter2D(src, -1, shape_op)
dst3 = cv.filter2D(src, cv.CV_32F, grad_op)  #图像 深度 自定义卷积核
dst3 = cv.convertScaleAbs(dst3)#将结果转为字节类型

cv.imshow("blur 5x5", dst1);
cv.imshow("shape 3x3", dst2);
cv.imshow("gradient 2x2", dst3);

cv.waitKey(0)
cv.destroyAllWindows()

函数原型:

dst=cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])  #函数原型
ddepth 目标图像的所需深度
kernel 卷积核(或相当于相关核),单通道浮点矩阵;如果要将不同的内核应用于不同的通道,请使用拆分将图像拆分为单独的颜色平面,然后单独处理它们。
anchor 内核的锚点,指示内核中过滤点的相对位置;锚应位于内核中;默认值(-1,-1)表示锚位于内核中心。
detal 在将它们存储在dst中之前,将可选值添加到已过滤的像素中。类似于偏置。
borderType 像素外推法,参见BorderTypes

其中ddepth包含有关图像中存储的数据类型的信息,可以是unsigned char(CV_8U),signed char(CV_8S),unsigned short(CV_16U)……

Input depth Output depth (ddepth)
CV_8U -1/CV_16S/CV_32F/CV_64F
CV_16U/CV_16S -1/CV_32F/CV_64F
CV_32F -1/CV_32F/CV_64F
CV_64F -1/CV_64F

当ddepth=-1时,表示输出图像与原图像有相同的深度。

效果如下:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200