网站icp备案号查询,jsp网站开发什么框架,php网站管理系统,海南房产网站制作1、灰度直方图
1.1 基本概念和作用 表示图像中每个灰度级别的像素数量。用于分析图像的亮度分布情况。 1.2 代码示例
参数介绍
hist cv2.calcHist(images, channels, mask, histSize, ranges, hist, accumulate)-images#xff1a;输入图像的列表。对于灰度图像#xff0…1、灰度直方图
1.1 基本概念和作用 表示图像中每个灰度级别的像素数量。用于分析图像的亮度分布情况。 1.2 代码示例
参数介绍
hist cv2.calcHist(images, channels, mask, histSize, ranges, hist, accumulate)-images输入图像的列表。对于灰度图像它只包含一个元素即一幅图像。对于彩色图像通常会传入一个包含所有颜色通道的列表。
-channels指定要统计直方图的通道。对于灰度图像值为[0]对于彩色图像可以传入[0]、[1]、[2]分别表示蓝、绿、红通道。如果是彩色图像也可以同时统计多个通道例如[0, 1, 2]表示统计所有通道。
-mask可选参数用于指定计算直方图的区域。如果不需要指定区域传入None
-histSize指定直方图的大小即灰度级别的个数。对于灰度图像通常设置为256表示从0到255的灰度级别。对于彩色图像可以设置为256表示每个通道的灰度级别。
-ranges指定像素值的范围。通常为[0, 256]表示灰度级别的范围。对于彩色图像例如[0, 256, 0, 256, 0, 256]表示三个通道各自的范围。
-hist可选参数用于存储计算得到的直方图。如果不提供函数会返回直方图
-accumulate示例
import cv2
import matplotlib.pyplot as plt# 读取图像
image cv2.imread(../images/1.jpg, cv2.IMREAD_GRAYSCALE)# 计算灰度直方图
hist cv2.calcHist([image], [0], None, [256], [0, 256])# 显示原图
plt.subplot(2, 1, 1)
plt.imshow(image, cmapgray)
plt.title(Original Image)# 显示灰度直方图
plt.subplot(2, 1, 2)
plt.plot(hist)
plt.title(Grayscale Histogram)
plt.xlabel(Pixel Value)
plt.ylabel(Frequency)# 调整子图布局避免重叠
plt.tight_layout()# 显示图像和直方图
plt.show()2、BGR直方图
2.1 基本概念和作用 BGR直方图是一种用于可视化彩色图像中蓝色Blue、绿色Green和红色Red三个通道的像素值分布情况的工具。了解图像中颜色的分布情况。通过分析BGR直方图可以得知图像中某个颜色通道的强度从而更好地理解图像的颜色特性。 2.2 代码示例
import cv2
import matplotlib.pyplot as plt# 读取彩色图像
image cv2.imread(../images/2.jpg)# 分离通道
b, g, r cv2.split(image)# 计算各通道的直方图
hist_b cv2.calcHist([b], [0], None, [256], [0, 256])
hist_g cv2.calcHist([g], [0], None, [256], [0, 256])
hist_r cv2.calcHist([r], [0], None, [256], [0, 256])# 显示彩色图像
plt.subplot(2, 1, 1)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title(Original Image)# 显示BGR直方图
plt.subplot(2, 1, 2)
plt.plot(hist_b, colorblue, labelBlue)
plt.plot(hist_g, colorgreen, labelGreen)
plt.plot(hist_r, colorred, labelRed)
plt.title(BGR Histogram)
plt.xlabel(Pixel Value)
plt.ylabel(Frequency)
plt.legend()# 调整子图布局避免重叠
plt.tight_layout()
# 显示图像和直方图
plt.show() 3、灰度直方图均衡
1. 基本概念和作用 用于增强图像对比度的技术通过调整图像中各个灰度级别的像素分布使得整个灰度范围更均匀地覆盖从而提高图像的视觉质量。这个过程可以使暗部和亮部细节更加清晰可见改善图像的视觉效果。 2. 代码示例
import cv2
import matplotlib.pyplot as plt# 读取灰度图像
image cv2.imread(../images/3.jpg, cv2.IMREAD_GRAYSCALE)# 进行灰度直方图均衡
equalized_image cv2.equalizeHist(image)# 显示原始灰度图像
plt.subplot(2, 1, 1)
plt.imshow(image, cmapgray)
plt.title(Original Grayscale Image)# 显示均衡后的灰度图像
plt.subplot(2, 1, 2)
plt.imshow(equalized_image, cmapgray)
plt.title(Equalized Grayscale Image)# 调整子图布局避免重叠
plt.tight_layout()# 显示图像
plt.show() 4、直方图变换查找
4.1 基本概念和作用 直方图变换也称为直方图查找是一种用于调整图像对比度的技术。它通过变换图像的灰度级别将原始图像的灰度分布均匀化使得图像中所有灰度级别的像素值分布更加平均。这样可以增强图像的对比度使细节更加突出提高图像的视觉质量。 直方图变换的核心思想是调整图像中各个灰度级别的像素值使得灰度值的分布更均匀从而实现对比度的增强。 4.2 代码示例
# 1 导入库
import cv2
import matplotlib.pyplot as plt
import numpy as np# 2 方法显示图片
def show_image(image, title, pos):# 顺序转换BGR TO RGBimage_RGB image[:, :, ::-1] # shape : (height, width, channel)# 显示标题plt.title(title)plt.subplot(2, 3, pos) # 定位plt.imshow(image_RGB)# 3 方法显示图片的灰度直方图
def show_histogram(hist, title, pos, color):# 显示标题plt.title(title)plt.subplot(2, 3, pos) # 定位图片plt.xlabel(Bins) # 横轴信息plt.ylabel(Pixels) # 纵轴信息plt.xlim([0, 256]) # 范围plt.plot(hist, colorcolor) # 绘制直方图# 4 主函数 main()
def main():# 5 创建画布plt.figure(figsize(15, 6)) # 画布大小plt.suptitle(Gray Image Histogram, fontsize14, fontweightbold) # 设置标题形式# 6 加载图片img cv2.imread(../images/4.jpg)# 7 灰度转换img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 8 计算灰度图的直方图hist_img cv2.calcHist([img_gray], [0], None, [256], [0, 256])# 9 展示灰度直方图# 灰度图转换成BGR格式图片img_BGR cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR)show_image(img_BGR, BGR image, 1)show_histogram(hist_img, gray image histogram, 4, m)# 10 对图片中的每个像素值增加50个像素M np.ones(img_gray.shape, np.uint8) * 50 # 构建矩阵added_img cv2.add(img_gray, M)add_img_hist cv2.calcHist([added_img], [0], None, [256], [0, 256]) # 计算直方图added_img_BGR cv2.cvtColor(added_img, cv2.COLOR_GRAY2BGR)show_image(added_img_BGR, added image, 2)show_histogram(add_img_hist, added image hist, 5, m)# 11 对图片中的每个像素值减去50个像素subtract_img cv2.subtract(img_gray, M)subtract_img_hist cv2.calcHist([subtract_img], [0], None, [256], [0, 256]) # 计算直方图subtract_img_BGR cv2.cvtColor(subtract_img, cv2.COLOR_GRAY2BGR)show_image(subtract_img_BGR, subtracted image, 3)show_histogram(subtract_img_hist, subtracted image hist, 6, m)plt.show()if __name__ __main__:main()图片中每个像素都增加五十个像素和减少五十像素的效果