OpenCV-Python实战(15)——像素直方图均衡画

一、像素均值与标准差

1.1 像素均值 cv2.mean()

python 复制代码
mean_val = cv2.mean(img,mask=*)

**mean_val:**图像 BGR 通道的均值和透明度。

**img:**图像。

**mask:**可以选择是否添加掩膜,默认为:None。

python 复制代码
import cv2
import numpy as np

img = cv2.imread('clahe.jpg') # 原图
cv2.imshow('img',img)
mean_val = cv2.mean(img)
print("mean_val",mean_val)

cv2.waitKey(0)
cv2.destroyAllWindows()
python 复制代码
mean_val (97.76646525877962, 97.76646525877962, 97.76646525877962, 0.0)

1.2 图像标准差cv2.meanStdDev()

python 复制代码
mean,std = cv2.meanStdDev(img,mask=*)

**mean:**图像 BGR 通道的均值。

**std:**图像 BGR 通道的标准差。

**img:**图像。

**mask:**可以选择是否添加掩膜,默认为:None。

python 复制代码
import cv2
import numpy as np

img = cv2.imread('clahe.jpg') # 原图
cv2.imshow('img',img)
mean,std = cv2.meanStdDev(img)
print("mean",mean)
print("std",std)
cv2.waitKey(0)
cv2.destroyAllWindows()
python 复制代码
mean [[97.76646526],[97.76646526],[97.76646526]]
std [[61.26630115],[61.26630115],[61.26630115]]

二、像素直方图 cv2.calcHist()

python 复制代码
hist = cv2.calcHist(images=*,channels=*,mask=*,histSize=*,ranges=*,accumulate=*)

hist:像素值统计结果,数据结构为numpy数组格式。

images:原始图像。

channels:图像通道,一次只能检测一个通道。

mask:掩膜,默认为:None。

histSize:hist()函数的bins数量,将0~255切割成多少区间。

ranges:像素值范围,一般为0~255或[0,256]。

accumulate:是否是多幅图像累加像素值,默认为:False。

python 复制代码
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('Lena.png ') # 原图
cv2.imshow('img',img)

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.savefig('hist.png',dpi=300,bbox_inches='tight')
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
python 复制代码
'''=======================mask--像素直方图======================='''
img = cv2.imread('Lena.png',cv2.IMREAD_GRAYSCALE)  # cv2.IMREAD_GRAYSCALE为灰度图
mask = np.zeros(img.shape[:2], np.uint8)
mask[150:400,200:370]=255
mask_img=cv2.bitwise_and(img,img,mask=mask)#图片之间与操作
 
hist_full = cv2.calcHist([img],[0],None,[256],[0,256])
hist_mask=cv2.calcHist([img],[0],mask,[256],[0,256])
plt.subplot(221), plt.imshow(img, 'gray')
plt.subplot(222), plt.imshow(mask, 'gray')
plt.subplot(223), plt.imshow(mask_img, 'gray')
plt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask)
plt.xlim([0, 256])
plt.savefig('hist_mask.png',dpi=300,bbox_inches='tight')
plt.show()

三、直方图均衡化

3.1 全局直方图均衡化

python 复制代码
img = cv2.equalizeHist(src=*)

**src:**为单通道图像。

3.2 自适应 直方图均衡化

python 复制代码
img = cv2.createCLAHE(clipLimit=*,tileGridSize=*)

**clipLimit:**均衡化颜色对比度大小。

**tileGridSize:**进行像素均衡化的网格大小。

python 复制代码
'''=======================均衡化像素直方图======================='''
img=cv2.imread('clahe.png',0)
# 原图
plt.subplot(131),plt.plot(cv2.calcHist([img],[0],None,[256],[0,256]))
# 全局直方图均衡化
equ=cv2.equalizeHist(img)
plt.subplot(132),plt.plot(cv2.calcHist([equ],[0],None,[256],[0,256]))
#自适应直方图均衡化
#clipLimit颜色对比度的阈值, 
#titleGridSize进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作
clahe=cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
res_clahe = clahe.apply(img)
plt.subplot(133),plt.plot(cv2.calcHist([res_clahe],[0],None,[256],[0,256]))
 
res = np.hstack((img,equ,res_clahe))
cv2.imwrite('clahe_all.png',res)
 
# plt.ylim([0, 1600])
plt.xlim([0, 256])
plt.savefig('clahe_hist.png',dpi=300,bbox_inches='tight')
plt.show()
相关推荐
晚霞的不甘1 小时前
CANN 支持多模态大模型:Qwen-VL 与 LLaVA 的端侧部署实战
人工智能·神经网络·架构·开源·音视频
华玥作者8 小时前
[特殊字符] VitePress 对接 Algolia AI 问答(DocSearch + AI Search)完整实战(下)
前端·人工智能·ai
AAD555888998 小时前
YOLO11-EfficientRepBiPAN载重汽车轮胎热成像检测与分类_3
人工智能·分类·数据挖掘
王建文go8 小时前
RAG(宠物健康AI)
人工智能·宠物·rag
ALINX技术博客8 小时前
【202601芯动态】全球 FPGA 异构热潮,ALINX 高性能异构新品预告
人工智能·fpga开发·gpu算力·fpga
易营宝8 小时前
多语言网站建设避坑指南:既要“数据同步”,又能“按市场个性化”,别踩这 5 个坑
大数据·人工智能
春日见8 小时前
vscode代码无法跳转
大数据·人工智能·深度学习·elasticsearch·搜索引擎
Drgfd9 小时前
真智能 vs 伪智能:天选 WE H7 Lite 用 AI 人脸识别 + 呼吸灯带,重新定义智能化充电桩
人工智能·智能充电桩·家用充电桩·充电桩推荐
好家伙VCC9 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
萤丰信息9 小时前
AI 筑基・生态共荣:智慧园区的价值重构与未来新途
大数据·运维·人工智能·科技·智慧城市·智慧园区