python + openCV图像处理(四)

文章目录

    • 引言
    • 示例图片
    • 代码

引言

此系列博客记录 网易云课堂 python + openCV图像处理课程的学习过程。

本篇博客将介绍 阈值分割图像平滑处理 两大部分。


示例图片

xiaoxin.png

python + openCV图像处理(四)_第1张图片


代码

1、阈值分割

原理:
python + openCV图像处理(四)_第2张图片
python + openCV图像处理(四)_第3张图片
python + openCV图像处理(四)_第4张图片
python + openCV图像处理(四)_第5张图片
python + openCV图像处理(四)_第6张图片

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 是类型

执行效果图:

①二进制阈值化:黑的更黑,亮的更亮
python + openCV图像处理(四)_第7张图片
②反二进制阈值化:黑的变亮,亮的变黑
python + openCV图像处理(四)_第8张图片
③截断阈值化:整体变暗
python + openCV图像处理(四)_第9张图片
④阈值化为0:黑的更黑
python + openCV图像处理(四)_第10张图片
⑤反阈值化为0:亮的变黑python + openCV图像处理(四)_第11张图片


2、图像平滑处理

  • 均值滤波

原理:
python + openCV图像处理(四)_第12张图片
python + openCV图像处理(四)_第13张图片
python + openCV图像处理(四)_第14张图片

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 是目标图像 ,xy 分别代表核的行列数

效果图:

①核为 5行5列
python + openCV图像处理(四)_第15张图片
②核为 100行100列
python + openCV图像处理(四)_第16张图片


  • 方框滤波

原理:
python + openCV图像处理(四)_第17张图片

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 是目标图像的深度 , xy 分别代表核的行列数,normalize 代表是否对目标结果进行归一化处理

效果图:

①进行归一化,与均值滤波相同
python + openCV图像处理(四)_第18张图片
②不进行归一化,所有值均接近255
python + openCV图像处理(四)_第19张图片


  • 高斯滤波

原理:
python + openCV图像处理(四)_第20张图片
python + openCV图像处理(四)_第21张图片
python + openCV图像处理(四)_第22张图片
在这里插入图片描述

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()

效果图:
python + openCV图像处理(四)_第23张图片


  • 中值滤波

原理:
python + openCV图像处理(四)_第24张图片
python + openCV图像处理(四)_第25张图片

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()

效果图:
python + openCV图像处理(四)_第26张图片

你可能感兴趣的:(openCV)