python+opencv进行图像去噪,检测梯度(附代码)

   opencv中一般是利用高通滤波器进行图像去噪,具体包括以下三个函数。

cv2.Sobel(),其实求得是一阶导数

cv2.Schar(),其实也求得是一阶导数,是对sobel算子的优化

cv2.Laplacian(),其实求得是二阶导数

上述三个算法的原理可以进行百度,很多地方都有。

另外我们需要知道的是,低通滤波器一般也是可以进行去噪声的。

附代码如下进行对比算法:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

img=cv2.imread('4.jfif') #原图为彩色图,可将第二个参数变为0,为灰度图

laplacian=cv2.Laplacian(img,cv2.CV_64F)#cv2.CV_64F输出图像的数据类型,可以使用-1,与原图像保持一致
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)# 参数 1,0 ,其中1是只在 x 方向求一阶导数,0是y方向不求导数,其最大可以求2阶导数。
sobely=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)  # 参数 1,0 ,其中1是只在 y 方向求一阶导数,0是x方向不求导数,其最大可以求2阶导数。

plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
plt.show()

运行结果如下所示:

拉普拉斯算法以及Sobel算法进行边缘检测(原图为彩图)

 

若要进行灰度图像的处理,代码如下:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

img=cv2.imread('4.jfif',0) #原图为彩色图,可将第二个参数变为0,为灰度图

laplacian=cv2.Laplacian(img,cv2.CV_64F)#cv2.CV_64F输出图像的数据类型,可以使用-1,与原图像保持一致
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)# 参数 1,0,其中1是只在x方向求一阶导数,0是y方向不求导数,其最大可以求2阶导数。
sobely=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)  # 参数 1,0 ,其中1是只在y方向求一阶导数,0是x方向不求导数,其最大可以求2阶导数。

plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
plt.show()

运行结果如下所示:

拉普拉斯算法以及Sobel算法进行边缘检测(灰度图)
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值