此系列博客记录 网易云课堂 python + openCV图像处理课程的学习过程。
本篇博客将介绍 阈值分割、图像平滑处理 两大部分。
xiaoxin.png
1、阈值分割
import cv2
a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
r,b = cv2.threshold(a,127,255,cv2.THRESH_BINARY) # 二进制阈值化
r,b = cv2.threshold(a,127,255,cv2.THRESH_BINARY_INV) # 反二进制阈值化
r,b = cv2.threshold(a,127,255,cv2.THRESH_TRUNC) # 截断阈值化
r,b = cv2.threshold(a,127,255,cv2.THRESH_TOZERO_INV) # 反阈值化为0
r,b = cv2.threshold(a,127,255,cv2.THRESH_TOZERO) # 阈值化为0
cv2.imshow("a",a)
cv2.imshow("b",b)
cv2.waitKey()
cv2.destroyAllWindows()
r,b = cv2.threshold(src,thresh,maxval,type)
其中,r 表示阈值,与 thresh 相等,b 是阈值化的返回结果,src 是目标图像,thresh 是阈值,maxval 是最大值,type 是类型
执行效果图:
①二进制阈值化:黑的更黑,亮的更亮
②反二进制阈值化:黑的变亮,亮的变黑
③截断阈值化:整体变暗
④阈值化为0:黑的更黑
⑤反阈值化为0:亮的变黑
2、图像平滑处理
import cv2
a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
# b = cv2.blur(a,(5,5)) # 核为 5行5列
b = cv2.blur(a,(100,100)) # 核为 100行100列
cv2.imshow("a",a)
cv2.imshow("b",b)
cv2.waitKey()
cv2.destroyAllWindows()
blur(a,(x,y))
- a 是目标图像 ,x 和 y 分别代表核的行列数
效果图:
import cv2
a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
b = cv2.boxFilter(a,-1,(2,2),normalize = 1) # 进行归一化,与均值滤波相同
# b = cv2.boxFilter(a,-1,(2,2),normalize = 0) # 不进行归一化,所有值接近255
cv2.imshow("a",a)
cv2.imshow("b",b)
cv2.waitKey()
cv2.destroyAllWindows()
boxFilter(a,d,(x,y),normalize = 1)
其中,a 是目标图像, d 是目标图像的深度 , x 和 y 分别代表核的行列数,normalize 代表是否对目标结果进行归一化处理
效果图:
①进行归一化,与均值滤波相同
②不进行归一化,所有值均接近255
import cv2
a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
b = cv2.GaussianBlur(a,(5,5),0) # 高斯滤波
cv2.imshow("a",a)
cv2.imshow("b",b)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
b = cv2.medianBlur(a,99)
cv2.imshow("a",a)
cv2.imshow("b",b)
cv2.waitKey()
cv2.destroyAllWindows()