OpenCV绘制图像颜色直方图教程

版权申诉
0 下载量 155 浏览量 更新于2024-10-25 收藏 1.07MB RAR 举报
资源摘要信息:"OpenCV彩色直方图操作教程" 知识点一:OpenCV简介 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV包含了大量计算机视觉处理的算法,如图像处理、特征检测、分类和识别等。由于其高效的算法执行能力和广泛的社区支持,OpenCV被广泛应用于学术研究、商业产品和工业应用中。 知识点二:图像直方图 图像直方图是图像处理中的一个基本概念,它能显示图像中各个像素强度(灰度或颜色)的分布情况。直方图是一个统计图表,通常以图表的形式展现,横轴代表像素值,纵轴代表该像素值对应的像素数量。在彩色图像处理中,由于涉及三个颜色通道(通常是RGB),颜色直方图会为每个颜色通道单独绘制,或者将颜色空间转换到其他表示法(如HSV)来分析。 知识点三:OpenCV绘制颜色直方图 在OpenCV中,可以使用cv::calcHist()函数来计算图像的直方图,然后使用cv::imshow()或其他绘图函数来显示这些直方图。当处理彩色图像时,需要分别对每个颜色通道进行直方图计算和显示。如果需要在一张直方图上显示所有颜色通道的信息,通常会将颜色空间转换到HSV或其他表示法,这样可以更直观地显示颜色分布。 知识点四:颜色空间转换 在图像处理中,颜色空间转换是一个重要的概念。例如,将RGB颜色空间转换到HSV颜色空间可以帮助我们更好地理解和分析颜色信息。HSV空间包括色调(Hue)、饱和度(Saturation)和亮度(Value),它更符合人类的视觉感知方式。在HSV空间中,色调H代表颜色类型,饱和度S代表颜色的深浅,亮度V代表颜色的明亮程度。在绘制颜色直方图时,转换到HSV空间后可以更容易地分离和分析颜色信息。 知识点五:OpenCV的实际应用 OpenCV可以用于各种图像处理和计算机视觉任务,包括但不限于物体检测、人脸识别、动作识别、图像分割和目标跟踪等。通过绘制颜色直方图,可以用于图像增强、颜色校正、图像分割等场景。例如,通过分析直方图来调整图像的亮度和对比度,或者通过颜色直方图均衡化来提高图像质量。 知识点六:文件内容与结构 由于压缩包中的文件名是“***.txt”和“例5-11”,可以推断压缩包可能包含与教程或示例代码相关的文本说明文件和示例代码。这些资源可能是用于教学目的,帮助学习者理解如何使用OpenCV绘制彩色直方图。例如,“***.txt”可能是一个文本文件,包含了该资源的下载链接或者相关教程的网址。而“例5-11”可能是一个具体的代码示例,演示如何在OpenCV环境下读取图像、计算并绘制颜色直方图。 通过上述知识点的介绍,可以看出OpenCV在彩色直方图绘制方面提供了强大的支持,可以满足开发者在图像处理和计算机视觉领域中的广泛需求。掌握这些知识,对于进行图像分析和处理有着重要的意义。

""" Contrast Limited Adaptive Histogram Equalization,CLAHE 对比度受限自适应直方图均衡 """ import cv2 # import numpy as np import matplotlib.pyplot as plt def show_img_with_matplotlib(color_img, title, pos): img_rgb = color_img[:, :, ::-1] plt.subplot(2, 5, pos) plt.imshow(img_rgb) plt.title(title, fontsize=8) plt.axis('off') def equalize_clahe_color_hsv(img): cla = cv2.createCLAHE(clipLimit=4.0) H, S, V = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV)) eq_V = cla.apply(V) eq_image = cv2.cvtColor(cv2.merge([H, S, eq_V]), cv2.COLOR_HSV2BGR) return eq_image def equalize_clahe_color_lab(img): cla = cv2.createCLAHE(clipLimit=4.0) L, a, b = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2Lab)) eq_L = cla.apply(L) eq_image = cv2.cvtColor(cv2.merge([eq_L, a, b]), cv2.COLOR_Lab2BGR) return eq_image def equalize_clahe_color_yuv(img): cla = cv2.createCLAHE(clipLimit=4.0) Y, U, V = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2YUV)) eq_Y = cla.apply(Y) eq_image = cv2.cvtColor(cv2.merge([eq_Y, U, V]), cv2.COLOR_YUV2BGR) return eq_image def equalize_clahe_color(img): cla = cv2.createCLAHE(clipLimit=4.0) channels = cv2.split(img) eq_channels = [] for ch in channels: eq_channels.append(cla.apply(ch)) eq_image = cv2.merge(eq_channels) return eq_image # 加载图像 image = cv2.imread('D:/Documents/python/OpenCV/image/008.jpg') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 灰度图像应用 CLAHE clahe = cv2.createCLAHE(clipLimit=2.0) gray_image_clahe = clahe.apply(gray_image) # 使用不同 clipLimit 值 clahe.setClipLimit(5.0) gray_image_clahe_2 = clahe.apply(gray_image) clahe.setClipLimit(10.0) gray_image_clahe_3 = clahe.apply(gray_image) clahe.setClipLimit(20.0) gray_image_clahe_4 = clahe.apply(gray_image) # 彩色图像应用 CLAHE image_clahe_color = equalize_clahe_color(image) image_clahe_color_lab = equalize_clahe_color_lab(image) image_clahe_color_hsv = equalize_clahe_color_hsv(image) image_clahe_color_yuv = equalize_clahe_color_yuv(image) # 标题 plt.figure(figsize=(10, 4)) plt.suptitle("Color histogram equalization with cv2.equalizedHist() - not a good approach", fontsize=9, fontweight='bold') # 可视化 show_img_with_matplotlib(cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR), "gray", 1) show_img_with_matplotlib(cv2.cvtColor(gray_image_clahe, cv2.COLOR_GRAY2BGR), "gray CLAHE clipLimit=2.0", 2) show_img_with_matplotlib(cv2.cvtColor(gray_image_clahe_2, cv2.COLOR_GRAY2BGR), "gray CLAHE clipLimit=5.0", 3) show_img_with_matplotlib(cv2.cvtColor(gray_image_clahe_3, cv2.COLOR_GRAY2BGR), "gray CLAHE clipLimit=10.0", 4) show_img_with_matplotlib(cv2.cvtColor(gray_image_clahe_4, cv2.COLOR_GRAY2BGR), "gray CLAHE clipLimit=20.0", 5) show_img_with_matplotlib(image, "color", 6) show_img_with_matplotlib(image_clahe_color, "clahe on each channel(BGR)", 7) show_img_with_matplotlib(image_clahe_color_lab, "clahe on each channel(LAB)", 8) show_img_with_matplotlib(image_clahe_color_hsv, "clahe on each channel(HSV)", 9) show_img_with_matplotlib(image_clahe_color_yuv, "clahe on each channel(YUV)", 10) plt.show()

2023-04-20 上传