网页设计作业讲解,临沂做网络优化的公司,淮安网站制作,陕西省城乡建设厅的网站1、图像阈值
t图像阈值函数#xff0c;就是需要判断一下像素值大于一个数应该怎么处理#xff0c;小于一个数应该怎么处理
ret, dst cv2.threshold(src, thresh, maxval, type)
参数解析#xff1a;
src#xff1a; 原始输入图#xff0c;只能输入单通道图像#…1、图像阈值
t图像阈值函数就是需要判断一下像素值大于一个数应该怎么处理小于一个数应该怎么处理
ret, dst cv2.threshold(src, thresh, maxval, type)
参数解析
src 原始输入图只能输入单通道图像通常来说为灰度图dst 输出图thresh 指定的阈值maxval 当像素值超过了阈值或者小于阈值根据type来决定所赋予的值type二值化操作的类型包含以下5种类型 cv2.THRESH_BINARY cv2.THRESH_BINARY_INV cv2.THRESH_TRUNC cv2.THRESH_TOZEROcv2.THRESH_TOZERO_INVcv2.THRESH_BINARY超过阈值部分取maxval最大值否则取0 如果阈值取150超过150就会都变成255否则变为0cv2.THRESH_BINARY_INVTHRESH_BINARY的反转cv2.THRESH_TRUNC大于阈值部分设为阈值否则不变cv2.THRESH_TOZERO大于阈值部分不改变否则设为0cv2.THRESH_TOZERO_INVTHRESH_TOZERO的反转
import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB# 读取图像为灰度图
imgcv2.imread(cat.jpg)
img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 五种参数都设置一遍
ret, thresh1 cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
_, thresh2 cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
_, thresh3 cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
_, thresh4 cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
_, thresh5 cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)# 存到一个变量中
titles [Original Image, BINARY, BINARY_INV, TRUNC, TOZERO, TOZERO_INV]
images [img, thresh1, thresh2, thresh3, thresh4, thresh5]# 放到一起画出来
for i in range(6):plt.subplot(2, 3, i 1), plt.imshow(images[i], gray)plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()
这里retthresh我们基本上只需要第二个参数就行了输出图 第一张是原始图像第二张所有大于127的区域全部变成了白色第三张将第二张进行了翻转第四张所有大于127的全部等于127第五张小于127全部为0 大于127的不变 第六张第五张的反转
2、图像平滑 图像平滑处理就是对图像进行各种滤波操作这个和卷积操作有一些相似
首先读取打印原始图像
import cv2 # opencv读取的格式是BGR
import matplotlib.pyplot as plt # Matplotlib是RGB
img cv2.imread(lenaNoise.png)
cv2.imshow(img, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
打印的图像 可以看到原始图像有很多白色斑点的噪音接下来用几种不同滤波操作过滤这个噪音点
2.1 均值滤波
实际上是一个简单的平均卷积操作如下图是一个图像的像素点的矩阵 比如圈住的这个部分是一个3*3的区域对这3*3的9个像素值求出一个均值然后将中间的204替换成这个均值那么就完成了204的滤波操作其他的像素点也是进行这样的操作。当然也可以是一个5*5的区域只能是奇数。
实现这个操作很简单
# 均值滤波
# 简单的平均卷积操作
blur cv2.blur(img, (3, 3))
cv2.imshow(blur, blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
打印结果 可以发现白点被淡化了一些但是还是存在
2.2 方框滤波
基本上和均值滤波一样
# 方框滤波
# 基本和均值一样可以选择归一化
box cv2.boxFilter(img,-1,(3,3), normalizeTrue) cv2.imshow(box, box)
cv2.waitKey(0)
cv2.destroyAllWindows()
这里可以选择normalize的取值当选择和True的时候和均值滤波没有任何区别。
但是选择False 的时候容易发生越界的行为 2.3 高斯滤波
高斯滤波也可以叫做高斯均值滤波它主要对目标像素点的周围的像素点就是加上了一些加权离它近的就影响大远的就小。比如3*3中上下左右都是0.8斜对角的都是0.6的。
# 高斯滤波
# 高斯模糊的卷积核里的数值是满足高斯分布相当于更重视中间的
aussian cv2.GaussianBlur(img, (5, 5), 1) cv2.imshow(aussian, aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()
打印结果 噪音点看起来比之前的平滑了一些。 2.4 中值滤波 这个做法需要把方框内的值进行从大到小进行排序把排在中间那个值替换目标像素的值
# 中值滤波
# 相当于用中值代替
median cv2.medianBlur(img, 5) # 中值滤波cv2.imshow(median, median)
cv2.waitKey(0)
cv2.destroyAllWindows()
打印结果 这个效果非常好
2.5 对比
将所有结果放在一起
# 展示所有的
res np.hstack((blur,aussian,median))
#print (res)
cv2.imshow(median vs average, res)
cv2.waitKey(0)
cv2.destroyAllWindows()