第二章、阈值和平滑处理

【摘要】 基于Python的OpenCV学习
第二章、阈值和平滑处理
00_思维导图

01_threshold
import cv2
import matplotlib.pyplot as plt
img1 = cv2.imread(‘hwc.jpg’,cv2.IMREAD_GRAYSCALE)
# cv2.threshold(image,thresh,maxval,…

基于Python的OpenCV学习

第二章、阈值和平滑处理

00_思维导图

在这里插入图片描述

01_threshold

import cv2
import matplotlib.pyplot as plt
img1 = cv2.imread('hwc.jpg',cv2.IMREAD_GRAYSCALE)
# cv2.threshold(image,thresh,maxval,type)方法,实现对image图像的阈值操作,操作对象通常为灰度图。
# thresh变量表示阈值,
# maxval变量表示阈值超过或低于thresh时所被赋予的值。
# type表示操作类型。
ret,img2 = cv2.threshold(img1,127,255,cv2.THRESH_BINARY)
ret,img3 = cv2.threshold(img1,127,255,cv2.THRESH_BINARY_INV)
ret,img4 = cv2.threshold(img1,127,255,cv2.THRESH_TRUNC)
ret,img5 = cv2.threshold(img1,127,255,cv2.THRESH_TOZERO)
ret,img6 = cv2.threshold(img1,127,255,cv2.THRESH_TOZERO_INV)
# cv2.THRESH_BINARY,超过thresh的部分取maxval,否值取0。过亮区域设为白图,过暗区域设为黑图。
# cv2.THRESH_BINARY_INV,低于thresh的部分取maxval,否则取0,是cv2.THRESH_BINARY的反转。过亮区域设为黑图,过暗区域设为白图。
# cv2.THRESH_TRUNC,大于阈值部分设为阈值,否则不变。
# cv2.THRESH_TOZERO,大于阈值部分不改变,否则设为0。过暗区域设为黑图。
# cv2.THRESH_TOZERO_INV,小于阈值部分不改变,否则设为0,是cv2.THRESH_TOZERO的反转。过亮区域设为黑图。
# 调用matplotlib观察区别。
img_list = [img1,img2,img3,img4,img5,img6]
tittle_list = ['1','2','3','4','5','6']
for i in range(6): plt.subplot(2,3,i+1) plt.imshow(img_list[i]) plt.title(tittle_list[i])
plt.show()
cv2.destroyAllWindows()

  
 

02_cv2.blur

import cv2
img1 = cv2.imread('lenaNoise.png')

# cv2.blur(image,shape)方法,均值滤波,简单的平均卷积操作。
img2 = cv2.blur(img1,(4,4))
# 其中,shape表示特定矩阵的大小。
# 对于该图片的所有像素点的值,将其修改为该点附近以shape划分出的区域内的像素点值的均值。
# 详细说明一下shape属性:创建一个形状为shape、各元素项各为1的矩阵。
# 该矩阵按照线性代数的乘法规则乘以原像素点附近shape区域的像素矩阵,乘积除以元素项个数即为新像素点值,实质上是归一化。

cv2.imshow('2',img2)
cv2.waitKey()
cv2.destroyAllWindows()

  
 

03_cv2.boxFilter

import cv2
img1 = cv2.imread('lenaNoise.png')

# img2 = cv2.boxFilter(image,-1,shape,normalize)方法,实现对图像的方框滤波。
img2 = cv2.boxFilter(img1,-1,(4,4),normalize=True)
# -1 表示新生成的图像与原图像颜色通道数目保持一致,非高端操作无需更改。
# shape属性同cv2.blur方法,此处不作详解。
# normalize布尔变量,矩阵相乘后的结果是否归一化
# # 其中,shape表示特定矩阵的大小。
# cv2.boxFilter(image,-1,shape,normalize=True)与cv2.blur(image,shape)效果完全相同。

cv2.imshow('2',img2)
cv2.waitKey()
cv2.destroyAllWindows()

  
 

05_cv2.GaussianBlur

import cv2
img1 = cv2.imread('lenaNoise.png')

# img2 = cv2.GaussianBlur(image,shape,1)方法,高斯滤波.
# 高斯滤波创建的矩阵元素数值是符合高斯分布的,更重视距离近的像素点的值。
img2 = cv2.GaussianBlur(img1,(5,5),1)

cv2.imshow('2',img2)
cv2.waitKey()
cv2.destroyAllWindows()

  
 

06_cv2.medianBlur

import cv2
img1 = cv2.imread('lenaNoise.png')

# img2 = cv2.medianBlur(image,shape)方法,实现对图像的中值滤波。
img2 = cv2.medianBlur(img1,5)
# 此处的shape变量仅有一个数字num,区域默认为num*num。
# 中值滤波并不需要矩阵相乘并归一化的运算,而是将区域内的像素点的值有序排列取中值。

cv2.imshow('2',img2)
cv2.waitKey()
cv2.destroyAllWindows()

  
 

07_平滑图片素材

在这里插入图片描述

文章来源: blog.csdn.net,作者:翟翟翟aaa,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/zhaizhaizhaiaaa/article/details/115840793

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享