建设银行网站上不去了,常见的cms网站,河南科技网站建设,后台很慢wordpress写在前面
本篇文章是opencv学习的第五篇文章#xff0c;主要讲解了直方图与傅里叶变换的有关操作#xff0c;作为初学者#xff0c;我尽己所能#xff0c;但仍会存在疏漏的地方#xff0c;希望各位看官不吝指正#x1f970; 写在中间
一、直方图
#xff08; 1 …写在前面
本篇文章是opencv学习的第五篇文章主要讲解了直方图与傅里叶变换的有关操作作为初学者我尽己所能但仍会存在疏漏的地方希望各位看官不吝指正 写在中间
一、直方图 1 简单介绍 直方图是可以对整幅图的灰度分布进行整体了解的图示通过直方图我们可以对图像的对比度、亮度和灰度分布等有一个直观了解。 在数字图像处理中直方图可以用来了解图像中像素的分布情况。直方图显示了图像中每个灰度级别的像素数目使我们可以对图像的对比度、亮度和灰度分布等有一个直观了解。 直方图通常用来进行图像增强和色彩校正。例如如果我们发现图像的直方图集中在低灰度级别处可以通过调整图像的亮度和对比度来增强图像。同样地如果图像的直方图峰值偏移可以通过色彩校正来调整图像的色彩平衡。 2 操作实现
cv2.calcHist(images, channels, mask, histSize, ranges)
images要计算直方图的图像数组。以 [img] 的形式传入
channels灰度图为 [0]彩色图B/G/R分别传入[0][1][2]。
mask掩模图像统计正负图像的数据就设置为None
histSize指定直方图的大小。默认值为 [256]表示每个通道的像素数量。
ranges指定直方图中每个通道像素值的范围。通常情况下为[0, 256]如果没有提供此参数那么 OpenCV 会自动计算范围。 3 代码展示
# 灰度直方图
img cv2.imread(D:\python\Program\pythonProject\photos\A6.png, 0)hist cv2.calcHist([img], [0], None, [256], [0, 256])
plt.hist(img.ravel(), 256)
plt.show()# BGR 直方图
img cv2.imread(D:\python\Program\pythonProject\photos\A6.png)
color (b, g, r)
for i, col in enumerate(color):histr cv2.calcHist([img], [i], None, [256], [0, 256])plt.plot(histr, colorcol)plt.xlim([0, 256])
plt.show()4 效果实现
灰度直方图 BGR直方图 二、图像均衡化 1 简单介绍 直方图均衡化 包括灰度直方图均衡化和彩色直方图均衡化这两种。其中前者比较简单直接使用函数即可后者需要对三个通道进行分离分别处理后合并输出。 自适应图像均衡化 直方图均衡化是应用于整幅图片的会导致一些图片部位太亮导致大部分细节丢失因此引入自适应均衡来解决这个问题。 它在每一个小区域内默认8×8进行直方图均衡化。当然如果有噪点的话噪点会被放大需要对小区域内的对比度进行限制。 2 操作实现
cv2.equalizeHist()
参数为输入图像 3 代码展示
img cv2.imread(D:\python\Program\pythonProject\photos\A6.png)
gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度图# 灰度图均衡化
equ cv2.equalizeHist(gray)
hist cv2.calcHist([equ], [0], None, [256], [0, 256])
plt.hist(img.ravel(), 256)
plt.show()# 原图和均衡图
result1 np.hstack((gray, equ))
cv2.imshow(result1, result1)
cv2.waitKey(0)
cv2.destroyAllWindows()#---------------------------------------------------------------# 彩色图像均衡化,需要分解通道 对每一个通道均衡化
(b, g, r) cv2.split(img)
bH cv2.equalizeHist(b)
gH cv2.equalizeHist(g)
rH cv2.equalizeHist(r)
# 合并每一个通道
equ2 cv2.merge((bH, gH, rH))# 原图和均衡图
result2 np.hstack((img, equ2))
cv2.imshow(result2, result2)
cv2.waitKey(0)
cv2.destroyAllWindows()# 自适应均衡图
img cv2.imread(D:\python\Program\pythonProject\photos\A6.png, 0)
clahe cv2.createCLAHE(clipLimit2.0, tileGridSize(8, 8))
cl1 clahe.apply(img)# 原图、直方均衡图、自适应均衡图
result3 np.hstack((img, equ, cl1))
cv2.imshow(result3, result3)
cv2.waitKey(0)
cv2.destroyAllWindows()4 效果实现
灰度图均衡化 彩色图均衡化 自适应均衡图原图、直方均衡图、自适应均衡图 三、傅里叶变换 1 简单介绍 傅里叶变换是一种用于信号处理和图像处理的重要技术。 傅里叶变换的作用 高频变化剧烈的灰度分量例如边界。 低频变化缓慢的灰度分量例如一片大海
滤波 低通滤波器只保留低频振幅较为平缓会使得图像模糊。 高通滤波器只保留高频振幅较为剧烈会使得图像细节增强。 2 操作实现
cv2.dft(img_float32, flagscv2.DFT_COMPLEX_OUTPUT)
第一个参数是要转换的图像.
第二个参数是指定输出类型的标志。在这里我们使用了cv2.DFT_COMPLEX_OUTPUT标志意味着输出将是一个复数矩阵。复数矩阵可以表示频域中的实部和虚部信息。 3 代码实现 频谱展示
img cv2.imread(D:\python\Program\pythonProject\photos\A7.png, 0)
# 输入图像需要先转换成np.float32 格式
img_float32 np.float32(img)dft cv2.dft(img_float32, flagscv2.DFT_COMPLEX_OUTPUT)# 得到的结果中频率为0的部分会在左上角通常要转换到中心位置可以通过shift变换来实现。
dft_shift np.fft.fftshift(dft)
# 得到灰度图能表示的形式
magnitude_spectrum 20*np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))plt.subplot(121), plt.imshow(img, cmapgray)
plt.title(Original Image), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(magnitude_spectrum, cmapgray)
plt.title(Magnitude Spectrum), plt.xticks([]), plt.yticks([])
plt.show()高通和低通滤波
img cv2.imread(D:\python\Program\pythonProject\photos\A7.png, 0)
img_float32 np.float32(img)dft cv2.dft(img_float32, flagscv2.DFT_COMPLEX_OUTPUT)
dft_shift np.fft.fftshift(dft)rows, cols img.shape
crow, ccol int(rows/2), int(cols/2) # 中心位置# 低通滤波输出细节特征轮廓就会显得模糊创建掩码时需要中心化为1周围为0的一个mask矩阵。
mask_1 np.zeros((rows, cols, 2), np.uint8)
mask_1[crow-30:crow30, ccol-30:ccol30] 1# 高通滤波输出轮廓特征除去细节创建掩码时需要中心化为0周围为1的一个mask矩阵。
mask_2 np.ones((rows, cols, 2), np.uint8)
mask_2[crow-30:crow30, ccol-30:ccol30] 0# IDFT(低通)
fshift dft_shift*mask_1
f_ishift np.fft.ifftshift(fshift)
img_back_1 cv2.idft(f_ishift)
img_back_1 cv2.magnitude(img_back_1[:, :, 0], img_back_1[:, :, 1])# IDFT(高通)
fshift dft_shift*mask_2
f_ishift np.fft.ifftshift(fshift)
img_back_2 cv2.idft(f_ishift)
img_back_2 cv2.magnitude(img_back_2[:, :, 0], img_back_2[:, :, 1])# 展示
plt.subplot(121), plt.imshow(img_back_1, cmapgray)
plt.title(LPF), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(img_back_2, cmapgray)
plt.title(HPF), plt.xticks([]), plt.yticks([])plt.show()4 效果展示
频谱展示 高通滤波和低通滤波 写在后面 点赞你的认可是我创作的动力 ⭐ 收藏你的青睐是我努力的方向 ✏️ 评论你的意见是我进步的财富