OpenCV系列学习之(三)

简介: OpenCV系列学习之(三)

一、直方图与傅里叶变换

1、直方图

943deb4714c012154da3e396dc2a9fa3.jpg

算法实现

importcv2frommatplotlibimportpyplotaspltimg=cv2.imread('cat.jpg')color=('b','g','r')fori,colinenumerate(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、图像均衡(要转换为灰度图像才能均衡化)

直方图均衡化算法原理

851adbccd615d650b379d64509e014ff.jpg

算法实现

importcv2frommatplotlibimportpyplotaspltimg=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)

、傅里叶变换

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

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

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

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

a410a055f40859ed6cb729a650fde3e1.jpg

importcv2frommatplotlibimportpyplotaspltimportnumpyasnpimg=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.shapecrow,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#这行代码有点问题#idftfshift=dft_shift*maskf_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()
相关文章
|
2月前
|
机器学习/深度学习 存储 数据库
Python3 OpenCV4 计算机视觉学习手册:6~11(5)
Python3 OpenCV4 计算机视觉学习手册:6~11(5)
63 0
|
2月前
|
存储 资源调度 算法
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
114 0
|
2月前
|
机器学习/深度学习 算法 数据可视化
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)-2
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
126 0
|
2月前
|
机器学习/深度学习 Ubuntu Linux
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)-1
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
91 1
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
OpenCV与AI深度学习之常用AI名词解释学习
AGI:Artificial General Intelligence (通用人工智能):是指具备与人类同等或超越人类的智能,能够表现出正常人类所具有的所有智能行为。又被称为强人工智能。
22 2
|
23天前
|
机器学习/深度学习 开发框架 TensorFlow
### 如何系统化学习OpenCV4
### 如何系统化学习OpenCV4
13 0
|
2月前
|
算法 计算机视觉 Python
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
|
2月前
|
存储 计算机视觉
OpenCV—学习基本绘图
OpenCV—学习基本绘图
|
2月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
127 0
|
2月前
|
算法 计算机视觉 C++
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测