OpenCV学习笔记(十二)——绘制颜色直方图以及颜色空间的转换

颜色直方图

颜色直方图是计算机视觉以及图像处理中一个重要的内容,颜色直方图可以反映图像颜色的统计分布以及基本色调,通过颜色直方图可以清晰的看到各个区间的像素有多少。颜色直方图是一种全局特征,反映了图像或某个区域的总体颜色属性,但不敏感于图像的方向和大小变化。在计算机视觉领域,颜色直方图作为一种特征描述子,广泛用于目标跟踪、图像检索等任务。它的优点在于提取简单方便,并且能够有效表示多模态的特征分布。

在OpenCV中使用cv2.calcHist()用于计算图像中的颜色直方图。其中函数中可以使用如下这些参数:

  • images:输入图像的指针或数组。
  • channels:要计算直方图的通道,为通道索引,比如灰度图为[0]
  • mask:掩码,用于指定图像区域的ROI(感兴趣区域)。
  • histSize:指定输出直方图的大小。
  • ranges:像素值的范围。
  • uniform:是否使用均匀的 bin 大小,默认为 true。
  • accumulate:是否累加到之前的直方图中,默认为 false。
  • nimages:输入图像的数量。
  • hist:输出的直方图。
  • dims:直方图的维度。

其中前五个参数是必须的,后面几个参数可以可选择使用,但是平时使用较少。

需要注意的是,在OpenCV中,我们一般使用matplotlib库中来绘制直方图,而不是使用imshow来绘制直方图。

例如,下面我们将彩色图片转换为灰色图像来计算其直方图。下面我们有这么一张图:

转换为灰度图像并且绘制灰度图的直方图为:

import cv2
import matplotlib.pyplot as pltimg=cv2.imread(r'D:/Photo/1.jpeg')gray_image=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
hist=cv2.calcHist([gray_image],[0],None,[256],[0,256])
plt.figure()
p=plt.subplot(111)
p.plot(hist

在上面的cv2.calcHIst()中一共有5个参数,将原始图像转换为灰度图之后,该函数的第一个参数[gray_image]是输入图像的列表;第二个参数[0]是我们要计算直方图的通道(在这里是[0]表示灰度通道);第三个参数None是掩码(在这里为None表示整个图像);第四个参数[256]是直方图的大小(在这里是[256]表示有256个bin);第五个参数[0,256]是像素值的范围(在这里是[0, 256]表示从0到255)。最后,我们使用matplotlib库来绘制直方图。

运行结果如下所示:

同样可以绘制多通道的颜色直方图,代码为:

import cv2
import matplotlib.pyplot as plt
import numpy as npimage=cv2.imread(r'D:/Photo/1.jpeg')
arrs=cv2.split(image)
colors=("b","g","r")
p=plt.subplot()
for (arr,color) in zip(arrs,colors):hist=cv2.calcHist([arr],[0],None,[256],[0,256])p.plot(hist,color=color)
plt.show()

如上面代码所示,分别为多个每个通道的内的像素中B通道、G通道以及R通道的各个值,统计其值。 

运行结果如下所示:

如上图所示为多通道情况下的颜色直方图,分别为蓝色、绿色以及红色在有一条曲线表示分布在各个值得像素点。

颜色空间转换 

在写代码的时候,我们进场会用到的是将彩色图像转换为灰色图像,函数的使用方法为cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)。实际上cvtCOLOR中第二个参数还可以是cv2.COLOR_BGR2HSV以及cv2.COLOR_BGR2LAB。cv2.COLOR_BGR2HSV在OpenCV中表示将图像从BGR颜色空间转换为HSV颜色空间的操作代码,cv2.COLOR_BGR2LAB在OpenCV中表示将图像从BGR颜色空间转换为Lab颜色空间的操作代码。

注:

HSV颜色模型是由A. R. Smith在1978年创建的,它依据人类对颜色的直观特性来构建。HSV代表色相(Hue)、饱和度(Saturation)和明度(Value)。

Lab色彩空间是一种与设备无关的颜色模型,它能够包含更广泛的颜色范围。Lab色彩空间是由国际照明委员会(CIE)在1976年提出的,主要用于改进和替代之前的色彩空间,如RGB和CMYK。Lab模式包括三个通道:L代表亮度,a代表从绿色到红色的色度变化,b代表从蓝色到黄色的色度变化。这种色彩空间的特点是:

将原图片分别转换为GRAY图片、HSV图片、LAB图片的代码为:

import cv2img=cv2.imread(r"D:/Photo/1.jpeg")
cv2.imshow('img',img)gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('GRAY_img',gray_img)hsv_img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('HSV_img',hsv_img)lab_img=cv2.cvtColor(img,cv2.COLOR_BGR2LAB)
cv2.imshow('LAB_img',lab_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下所示:

原图和GRAY图片

 

HSV图像和LAB

如上图所示为原图、GRAY图片、HSV图片和LAB图片。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/564186.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Navicat 干货 | 探索 PostgreSQL 的外部数据包装器和统计函数

PostgreSQL 因其稳定性和可扩展性而广受青睐,为开发人员和数据管理员提供了许多有用的函数。在这些函数中,file_fdw_handler、file_fdw_validator、pg_stat_statements、pg_stat_statements_info 以及 pg_stat_statements_reset 是其中的重要函数&#x…

【python 装饰器 - 重试】做一个简易重试装饰器,如果函数执行错误则会自动重新执行,可设置重试次数,对爬虫比较友好

文章日期:2024.03.19 使用工具:Python 类型:装饰器 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标准算法)&…

数据容器-序列-集合-Python

师从黑马程序员 序列 序列的常用操作-切片 切片:从一个序列中,取出一个子序列 语法:序列[起始下标:结束下标,步长] 注:此操作不会影响序列本身,而是会得到一个新的序列 my_list[0.1,2,3,4,5,6] result1…

谧林涓露门禁

原神武器升级材料谧林涓露和门禁好像聂。 difference(){union(){cylinder(2, 10,10, $fn365);hull(){translate([15,0,0])cylinder(1,2,2,$fn365);cylinder(1,10,10,$fn365);}}translate([15,0,-1])cylinder(4,1,1,$fn365); }

UDP建立聊天群

参考网上代码 接收端 #include<myhead.h> #define PRINT_ERR(msg) \ do \ { \ printf("%s,…

【4XVR】win11局域网共享3D影片给quest3

准备工作 首先要有一个路由器&#xff0c;使电脑和quest3处于同一个局域网下 一.创建一个离线账户 打开设置选择账户 添加账户 二.共享文件 选择要共享的文件夹&#xff0c;右键打开属性&#xff0c;点击共享 选择刚刚创建的用户&#xff0c;点击共享即可 三.使用quest观影 …

Airtest自动化测试工具

一开始知道Airtest大概是在年初的时候&#xff0c;当时&#xff0c;看了一下官方的文档&#xff0c;大概是类似Sikuli的一个工具&#xff0c;主要用来做游戏自动化的&#xff0c;通过截图的方式用来解决游戏自动化测试的难题。最近&#xff0c;移动端测试的同事尝试用它的poco库…

从边缘设备丰富你的 Elasticsearch 文档

作者&#xff1a;David Pilato 我们在之前的文章中已经了解了如何丰富 Elasticsearch 本身和 Logstash 中的数据。 但如果我们可以从边缘设备中做到这一点呢&#xff1f; 这将减少 Elasticsearch 要做的工作。 让我们看看如何从具有代理处理器的 Elastic 代理中执行此操作。 E…

keepalived高可用方案

keepalived概念 keepalived是一个开源的虚拟路由冗余协议&#xff08;VRRP&#xff09;实现&#xff0c;它能够提供高可用性&#xff08;HA&#xff09;的解决方案。VRRP是一种网络协议&#xff0c;用于在多个路由器之间分配路由任务&#xff0c;以保证网络的可靠性。在服务器…

VMware Workstation Pro 17虚拟机超级详细搭建(含redis,nacos,docker, rabbitmq,sentinel,elasticsearch....)(一)

今天从零搭建一下虚拟机的环境&#xff0c;把nacos&#xff0c;redis等微服务组件还有数据库搭建到里面&#xff0c;首先看到的是我们最开始下载VMware Workstation Pro 17 之后的样子&#xff0c;总共一起应该有三部分因为篇幅太长了 下载地址 : VMware - Delivering a Digit…

【VALL-E-01】环境搭建

本系列文章系本人知乎账号迁移 本文系个人知乎专栏文章迁移 VALL-E 网络是GPT-SOVITS很重要的参考 知乎专栏地址&#xff1a; 语音生成专栏 相关文章链接&#xff1a; 【VALL-E-01】环境搭建 【VALL-E-02】核心原理 1、环境包使用 从效果看没有GPT-SOVITS 来的好 环境安装…

C#学习笔记1:C#基本文件结构与语法

现在开始我的C#学习之路吧&#xff0c;这也许不适合0编程基础的人看&#xff0c;因为我会C语言了&#xff0c;笔记做的可能有思维上的跳跃&#xff0c;如果0基础可能会觉得有些地方转折得莫名奇妙&#xff0c;但我的学习笔记实操还是比较多的&#xff0c;基本都是真实运行程序结…