openCV教程(二)

1 卷积操作

在这里插入图片描述
filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]ll])

  • ddepth是卷积之后图片的位深,即卷积之后图片的数据类型,一般设为-1,表示和原图类型一致.
  • kernel是卷积核大小,用元组或者ndarray表示,要求数据类型必须是float型.
  • anchor锚点,即卷积核的中心点,是可选参数,默认是(-1,-1)
  • delta 可选参数,表示卷积之后额外加的一个值,相当于线性方程中的偏差,默认是O.
  • borderType边界类型.一般不设.
# OpenCv图像卷积操作
import cv2
import numpy as np
# 导入图片
img = cv2.imread('./image/dog.png')
# 相当于原始图片中的每个点都被平均了一下,所以图像变模糊了.
kernel = np.ones((5,5),np.float32) / 25
# ddepth = -1表示图片的数据类型不变
dst = cv2.filter2D(img,-1,kernel)
#很明显卷积之后的图片模糊了.
cv2.imshow('img',np.hstack((img,dst) ))
cv2.waitKey(0)
cv2.destroyAllWindows()

2 滤波

2.1 方盒滤波和均值滤波

在这里插入图片描述

# 方盒滤波
# import cv2
# import numpy as np
# #导入图片
# img = cv2.imread( './image/dog.png' )
# #不用手动创建卷积核,只需要告诉方盒滤波,卷积核的大小是多少.
# dst = cv2.boxFilter(img,-1,(5,5),normalize=True)

# #很明显卷积之后的图片模糊了.
# cv2.imshow('img',np.hstack((img,dst)))
# cv2.waitKey(0)
# cv2.destroyAllWindows()

# 均值滤波
import cv2
import numpy as np
#导入图片
img = cv2.imread( './image/dog.png' )
kernel = np.ones((5,5), np.float32) / 25 
# ddepth = -1表示图片的数据类型不变
dst = cv2.blur(img,(5,5))
#很明显卷积之后的图片模糊了.
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 高斯滤波

在这里插入图片描述

#高斯滤波
import cv2
import numpy as np
#导入图片
img = cv2.imread( './image/dog.png' )
dst = cv2.GaussianBlur(img,(5,5), sigmaX=100)
cv2.imshow ('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()

2.3 中值滤波

  • 中值滤波原理非常简单,假设有一个数组[556789],
  • 取其中的中间值(即中位数)作为卷积后的结果值即可.
  • 中值滤波对胡椒噪音(也叫椒盐噪音)效果明显.
#中值滤波
import cv2
import numpy as np
#导入图片
img = cv2.imread( './image/cat.png' )
#注意这里的ksize就是一个数字
dst = cv2.medianBlur(img,5)
cv2.imshow('img', np.hstack((img, dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 适合椒盐点
    在这里插入图片描述

2.4 双边滤波

在这里插入图片描述

#双边滤波#中值滤波
import cv2
import numpy as np
#导入图片
img = cv2.imread( './image/cat.png' )
# 美颜、磨皮
dst =cv2.bilateralFilter(img, 7,sigmaColor=20,sigmaSpace=50)
cv2.imshow('img', np.hstack((img, dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

3 算子

3.1 索贝尔算子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#索贝尔算子.
import cv2
import numpy as np
#导入图片
img = cv2.imread('./image/dog.png')
# x轴方向,获取的是垂直边缘
dx = cv2.Sobel(img, cv2.CV_64F,1,0, ksize=5)
dy = cv2.Sobel(img, cv2.CV_64F,0,1, ksize=5)

#可利用numpy的加法,直接整合两张图片
dst = dx + dy
#也可利用opencv的加法dst = cv2.add(dx, dy)
cv2.imshow('img',img)
cv2.imshow('dst',np.hstack((dx,dy,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()

3.2 沙尔算子

在这里插入图片描述

#沙尔算子.
import cv2
import numpy as np

#导入图片
img = cv2.imread('./image/dog.png')
dx = cv2.Scharr(img, cv2.CV_64F,1,0)
# y轴方向,获取的是水平边缘
dy = cv2.Scharr(img,cv2.CV_64F,0,1)
#可利用numpy的加法,直接整合两张图片
dst = dx + dy
#也可利用opencv的加法dst = cv2.add( dx,dy)
cv2.imshow('dst',np.hstack((dx,dy,dst))

猜你喜欢

转载自blog.csdn.net/weixin_43684214/article/details/134104808
今日推荐