OpenCV之高通滤波

高通滤波最主要的作用是检测边缘
Sobel(索贝尔)(高斯):
对噪音适用性很强,在内部首先使用了高斯滤波对噪音进行过滤,之后再通过一阶导求得图像边缘。【若卷积核size设置为-1,则自动使用的是沙尔滤波算法】
Scharr(沙尔) :
卷积核不可改变的一个3x3大小卷积核,可以检测出比较细小的边缘线(不常用,索贝尔可以代替沙尔)
索贝尔和沙尔的缺陷是只能检测一个方向的边缘,要么横轴,要么纵轴,所以调用 完后还需要自己把横轴和纵轴检测到的边缘线加起来才是最终结果
Laplacian(拉普拉斯):
可以把横轴和纵轴的边缘全部检测出来,但是对噪音比较敏感,在内部没有进行降噪操作,使用之前需要自己手工降噪

索贝尔api
Sobel(src, ddepth, dx, dy, ksize = 3,
scale = 1, detal = 0, boderType = BORDER_DEFAULT)

src : 原图片
ddepth :输出图片位深
dx = 1,则检测出y方向边缘
dy = 1,则检测出x方向边缘
ksize :卷积核大小,若=-1,则为沙尔算法
以下代码就是用索贝尔算法例子

import cv2
import numpy as np

img = cv2.imread('d:\\STUDY_OPENCV\\img\\sz.png')
#索贝尔算子y方向边缘
d1 = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)#dx为1代表求得是y方向的边缘
#索贝尔算子x方向边缘
d2 = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
#dst = d1+d2 ,与下行代码功能一样
dst = cv2.add(d1,d2)
cv2.imshow('dst', dst)
cv2.imshow('d1',d1)
cv2.imshow('d2',d2)
cv2.imshow('img',img)
cv2.waitKey(0)

OpenCV之高通滤波_第1张图片
沙尔api
Scharr(src, ddepth, dx, dy,
scale = 1, detal = 0, boderType = BORDER_DEFAULT)
拉普拉斯api
Laplacian (src, ddepth, ksize = 1, scale = 1, boderType = BORDER_DEFAULT)

边缘检测小能手:canny

  1. 使用5x5高斯滤波消除噪声
  2. 调用索贝尔从四个方向上对图像计算检测(0°/45°/90°/135°)
  3. 在四个方向上取局部最大值
  4. 取出所有局部最大值之后进行阈值计算()

Canny(img, minVal, maxVal,…)
img :需要处理的图片
minVal :自己设定的最小阈值
maxVal :设定的最大阈值
【最小阈值和最大阈值中间范围过大时检测到的边缘比较少】

import cv2
import numpy as np
img = cv2.imread('d:\\STUDY_OPENCV\\img\\cdog.jpg')
dst = cv2.Canny(img, 120, 150)
cv2.imshow('img',img)
cv2.imshow('dst', dst)
cv2.waitKey(0)

你可能感兴趣的:(opencv,计算机视觉,人工智能)