文章目录
- 7.直方图与傅里叶变换
- (1)直方图定义
- (2)均衡化原理
- (3)均衡化效果
- (4)傅里叶概述
- (5)频域变换结果
- (6)低通与高通滤波
7.直方图与傅里叶变换
(1)直方图定义
import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
%matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows()
直方图
cv2.calcHist(images,channels,mask,histSize,ranges)
- images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]
- channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的参数可以是 [0][1][2] 它们分别对应着 BGR。
- mask: 掩模图像。统整幅图像的直方图就把它为 None。但是如 果你想统图像某一分的直方图的你就制作一个掩模图像并 使用它。
- histSize:BIN 的数目。也应用中括号括来。它定义了直方图的分辨率,即在指定的像素值范围内,将像素值划分为多少个区间(桶)。
- ranges: 像素值范围常为 [0,256]
,ranges 参数定义的是一个闭区间 [min, max),即包括最小值 min,但不包括最大值 max
img = cv2.imread('cat.jpg',0) #0表示灰度图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
hist.shape #有 256 行,每行有一个值,表示该像素值的像素数量。
(256, 1)
- plt.hist 是 Matplotlib 库中用于绘制直方图的函数。
- img.ravel() 将二维数组 img 展平为一个一维数组。这个一维数组包含了图像中所有像素的值,每个值的范围是 0 到 255。
plt.hist(img.ravel(),256) #第一个参数是数据数组,第二个参数是直方图的桶(bin)数目
#plt.axis('off')
plt.show()
三个颜色通道的直方图统计结果
img = cv2.imread('cat.jpg')
color = ('b','g','r')
for i,col in enumerate(color): histr = cv2.calcHist([img],[i],None,[256],[0,256]) plt.plot(histr,color = col) plt.xlim([0,256])
(2)均衡化原理
mask操作
#创建mask
mask = np.zeros(img.shape[:2],np.uint8)
mask[100:300,100:400] = 255
cv_show(mask,'mask')
img = cv2.imread