欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

OpenCV学习系列的第三部分:

最编程 2024-08-14 13:33:09
...

一、直方图与傅里叶变换

1、直方图

网络异常,图片无法展示
|

算法实现

import cv2from matplotlib import pyplot as 
pltimg=cv2.imread('cat.jpg')color=('b','g','r')for i,col in
enumerate(color): 
    hist=cv2.calcHist([img],[0],None,[256],[0,256])   
    plt.plot(hist,color=col)   
    plt.xlim([0,256])   
    plt.imshow(hist)   
    plt.show()print(hist.shape)

2、图像均衡(要转换为灰度图像才能均衡化)

直方图均衡化算法原理

网络异常,图片无法展示
|

算法实现

import cv2from matplotlib import pyplot as 
pltimg=cv2.imread('cat.jpg',0)plt.hist(img.ravel(),256)
#ravel(把多维数组转化为一维数组)
plt.show()equ=cv2.equalizeHist(img)plt.hist(equ.ravel(),256)
plt.show()

自适应均衡化:分块实现均衡化

算法实现

clahe=cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))res_clahe=clahe.apply(img)

、傅里叶变换

傅里叶变换的作用:高频:变化剧烈的灰度分量。例如边界。

低频:变化缓慢的灰度分量,例如大海。

低通滤波器:只保留低频,会使得图像模糊

高通滤波器:只保留高频,会使得图像细节增强

网络异常,图片无法展示
|

import cv2
from matplotlib import pyplot as plt
import numpy as np
img=cv2.imread('lena.jpg',0)
img_float32=np.float32(img)
dft=cv2.dft(img_float32,flags=cv2.DFT_COMPLEX_OUTPUT)
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,cmap='gray')
plt.title('Input Image'),plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(magnitude_spectrum,cmap='gray')
plt.title('magni'),plt.xticks([]),plt.yticks([])
plt.show()

高通滤波代码实现


img_float32=np.float32(img)
dft=cv2.dft(img_float32,flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift=np.fft.fftshift(dft)   #把低频的移到中间
rows,cols=img.shape
crow,ccol=int(rows/2),int(cols/2)  #中心位置
#高通滤波
mask=np.ones((rows,cols,2),np.uint8)
mask[crow-50:crow+50,ccol-50,ccol+50]=0   #这行代码有点问题
#idft
fshift=dft_shift*mask
f_ishift=np.fft.fftshift(fshift)
img_back=cv2.idft(f_ishift)
img_back=cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
#得到灰度图能表现的形式
plt.subplot(121),plt.imshow(img,cmap='gray')
plt.title('Input Image'),plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(img_back,cmap='gray')
plt.title('result'),plt.xticks([]),plt.yticks([])
plt.show()

推荐阅读