在一张图片中一定会有很多的边缘线,高通滤波最主要的作用就是检测边缘。Opencv为我们提供了几种高通滤波。
Sobel(索贝尔)特点是抗噪音效果好
Schar(沙尔)一个卷积核不可改变的滤波方式,对于3*3的卷积核来说索贝尔滤波效果比不上沙尔滤波。
 
Laplacian(拉普拉斯)对于噪音比较敏感
 
Sobel索贝尔算子:
一般情况下我们先向x方向求导,然后在y方向求导,最终结果是:|G|=|Gx|+|Gy|。
Sobel索贝尔api:
Sobel(src,ddepth,dx,dy,ksize=3)
Src:具体操作的图片
Ddepth:输出的位深
dx,dy:对谁求导
Ksize:卷积核默认为3

 
import cv2
import numpy as np


# 导入一张图
img=cv2.imread('C:\\Users\\mk\\Desktop\\1.jpg')
# 索贝尔x方向上的边缘
dst_x=cv2.Sobel(img,cv2.CV_64F,2,0,ksize=5)
# 索贝尔y方向上的边缘
dst_y=cv2.Sobel(img,cv2.CV_64F,0,2,ksize=5)
# 合并图片
dst=dst_x+dst_y

# 显示图片
cv2.imshow('img',img)
cv2.imshow('dst_x',dst_x)
cv2.imshow('dst_y',dst_y)
cv2.imshow('dst',dst)
cv2.waitKey(0)
Scharr沙尔算子
沙尔算子和索贝尔算子很类似的,最大的不同是卷积核kernel的值不同。沙尔只能求x方向或者y方向的边缘。
Scharr沙尔api:
Scharr(src,ddepth,dx,dy)
Src:具体进行操作的图片
Ddepth:输出的位深
dx,dy:对哪个方向求导
 
import cv2
import numpy as np


# 导入一张图
img=cv2.imread('C:\\Users\\mk\\Desktop\\1.jpg')
# 沙尔x方向上的边缘
dst_x=cv2.Scharr(img,cv2.CV_64F,1,0)
# 沙尔y方向上的边缘
dst_y=cv2.Scharr(img,cv2.CV_64F,0,1)
# 合并图片
dst=dst_x+dst_y

# 显示图片
cv2.imshow('img',img)
cv2.imshow('dst_x',dst_x)
cv2.imshow('dst_y',dst_y)
cv2.imshow('dst',dst)
cv2.waitKey(0)
Laplacian拉普拉斯算子
拉普拉斯可以同时求两个方向的边缘,缺点是多噪音比较敏感,一般需要先进行去噪然后再使用拉普拉斯。
Laplacian拉普拉斯api:
Laplacian(img,ddepth,ksize=1,scale=1)
img:具体进行操作的图片
ddepth:输出的位深
ksize:卷积核大小,不设默认值为1
scale:缩放值,不设默认值为1
import cv2
import numpy as np


# 导入一张图
img=cv2.imread('C:\\Users\\mk\\Desktop\\1.jpg')
# 拉普拉斯
dst=cv2.Laplacian(img,cv2.CV_64F,ksize=5)

# 显示图片
cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)
评论
头像
验证码:
相关推荐

七年之痒是什么意思

520送什么给女友

第一次见女方父母送什么好




如果未经特殊说明,本站内容皆为原创,转载内容如果侵犯了您的权益,如有侵权请联系管理员删除
联系QQ:2380712278

备案号:皖ICP备19012824号