opencv图像卷积

低通滤波与高通滤波

  • 低通滤波可以去除噪音或平滑图像
  • 高通滤波可以帮助查找图像的边缘

图像的卷积

  • filter2D(src, ddepth, kernel, anchor, delta, borderType)
  • kernel 核
  • anchor 锚点
  • borderType 边界类型
import cv2 as cv
import numpy as np

img = cv.imread('dog.jpeg')
kernel = np.ones((5,5),np.float32)/25
dst = cv.filter2D(img, -1, kernel)
cv.imshow('dst', dst)
cv.imshow('img',img)
cv.waitKey(0)

opencv图像卷积_第1张图片

方盒滤波与均值滤波

opencv图像卷积_第2张图片
参数a 的作用

  • normalize = true, a = 1/W x H
  • normalize = FALSE, a = 1
  • normalize = true 时,方盒滤波==平均滤波

两个滤波API

boxFilter(src,ddepth,ksize, anchor,normalise, borderType)
blur(src,ksize,anchor,borderType)

import cv2 as cv
import numpy as np

img = cv.imread('dog.jpeg')
# kernel = np.ones((5,5),np.float32)/25
# dst = cv.filter2D(img, -1, kernel)

dst = cv.blur(img, (5, 5))
cv.imshow('dst', dst)
cv.imshow('img', img)
cv.waitKey(0)

高斯滤波

opencv图像卷积_第3张图片
opencv图像卷积_第4张图片
中心位置的比重是最高的。值不一定是最高的
opencv图像卷积_第5张图片
高斯滤波API

  • GaussianBlur(img,Kernel,sigmaX,sigmaY,…)
    opencv图像卷积_第6张图片
    opencv图像卷积_第7张图片
import cv2 as cv
import numpy as np

img = cv.imread('dog.jpeg')
# kernel = np.ones((5,5),np.float32)/25
# dst = cv.filter2D(img, -1, kernel)

# dst = cv.blur(img, (5, 5))

dst = cv.GaussianBlur(img,(5,5),1)
cv.imshow('dst', dst)

cv.imshow('img', img)
cv.waitKey(0)

中值滤波

假设有一个数组[1556789],取其中的中间值作为卷积后的结果值,对胡椒噪音效果明显

  • medianBlur(img,ksize)
  • ksize 3,5,7…

双边滤波

优点:可以保留边缘,同时可以对边缘内的区域进行平滑处理,常见的用途是比如进行美颜
opencv图像卷积_第8张图片
bilateralFilter(img,d,sigmaColor, sigmaSpace,…)

import cv2 as cv
import numpy as np

img = cv.imread('dog.jpeg')
# kernel = np.ones((5,5),np.float32)/25
# dst = cv.filter2D(img, -1, kernel)

# dst = cv.blur(img, (5, 5))

# dst = cv.GaussianBlur(img,(5,5),1)   # 高斯滤波
# dst = cv.medianBlur(img, 3)    # 中值滤波
dst = cv.bilateralFilter(img,7,20,50)  # 双边滤波
cv.imshow('dst', dst)

cv.imshow('img', img)
cv.waitKey(0)

高通滤波

scharr 算子

  • 与sobel类似,只不过使用的kernel值不同
  • scharr只能求x或者y方的边缘
  • Scharr(src,ddepth,dx,dy,scale=1,delta=0,borderType = BORDER_DEFAULT)

lapulacian算子

Laplacian(img,ddepth,dx,dy,scale=1,ksize=1,borderType = BORDER_DEFAULT)

Canny算子

  • 使用5x5高斯滤波消除噪声
  • 计算图像梯度的方向(0/45/90/135)
  • 取局部极大值
  • 阈值计算
    阈值计算的方法
    opencv图像卷积_第9张图片
    Canny API
    Canny(img,minVal,maxVal,…)
import cv2 as cv
import numpy as np

img = cv.imread('./dog.jpeg')
dst = cv.Canny(img,100, 200)

cv.imshow('dst',dst)
cv.imshow('img', img)
cv.waitKey(0)

opencv图像卷积_第10张图片

你可能感兴趣的:(opencv,基础,opencv,计算机视觉,python)