目录
一、图像阈值
二、图像平滑处理
1、cv2.blur() 均值滤波
2、cv2.GuassianBlur() 高斯滤波
3、中值滤波
三、形态学腐蚀操作
1.灰度化
2.二值化
3.腐蚀操作
四、形态学膨胀操作
ret, dst = cv2.threshold(scr, thresh, maxval, type)
import cv2
#读取图片
face = cv2.imread('./face1.jpg')
#对图片进行阈值操作处理
ret, thresh1 = cv2.threshold(face, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(face, 127, 233, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(face, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(face, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(face, 127, 255, cv2.THRESH_TOZERO_INV)
#将处理后的图片放到一个列表中,再循环展示并保存到同一目录中
imgs = [face, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in range(6):
cv2.namedWindow('huihui', cv2.WINDOW_NORMAL)
cv2.resizeWindow('huihui', 500, 700)
cv2.imshow('huihui', imgs[i])
# cv2.imshow("face", imgs[i])
key = cv2.waitKey(0)
if key == ord('q'):
break
cv2.destroyAllWindows()
运行结果如图:
face1 thresh1 thresh2 thresh3
thresh4 thresh5
# 均值滤波
blur = cv2.blur(img, (5, 5))
(上面的是原图,下面是均值滤波之后的图)
高斯滤波在图像处理概念下,将图像频域处理和时域处理相联系,作为低通滤波器使用,可以将低频能量(比如噪声)滤去,起到图像平滑作用。
# 高斯滤波:主要用来处理正态分布的噪声
aussian = cv2.GaussianBlur(img, (5, 5), 1)
#显示并保存连接原图和处理后的图
res2 = np.vstack((img, aussian))
cv2.imshow('all', res2)
cv2.imwrite('./cat1.jpg', res2)
由于中值滤波不会处理最大和最小值,所以就不会受到噪声的影响;相反,如果直接采用blur进行均值滤波,则不会区分这些噪声点,滤波后的图像会受到噪声的影响。
中值滤波主要用于处理椒盐噪声。
# 中值滤波:相当于用中值代替
median = cv2.medianBlur(img, 5)
res2 = np.vstack((img, median))
cv2.imshow('all', res2)
腐蚀的作用是消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点;
进行腐蚀操作时首先需要对图片进行灰度化、二值化。
有两种方法:
1)读取图片时设置灰度格式,即0
cv2.imread('picture.jpg', img, 0)
2)灰度化处理图片
# gray是灰度图,img是原图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#thresh1是二值化之后的图,gray是灰度图
ret, thresh1 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(thresh1, kernel, iterations=1)
#erosion是腐蚀操作之后的图片
完整代码如下:
import cv2
import numpy as np
img = cv2.imread('./erode.png')
img = cv2.resize(img, dsize=(400, 300))
#设置图片尺寸
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel, iterations=1)
res1 = np.vstack((img, erosion))
cv2.imshow('erosion.png', res1)
cv2.waitKey(0)
cv2.destroyAllWindows()
(上图是原图,下面为腐蚀操作之后的图)
膨胀的作用是将与物体接触的所有背景点合并到物体中,使目标增大,可添补目标中的孔洞。
kernel = np.ones((5, 5), np.uint8)
dilate = cv2.dilate(erosion, kernel, iterations=1)
在腐蚀操作之后再进行膨胀操作是一对逆运算,通常两者相互配合使用。
(腐蚀之后再膨胀的效果如下图)