005 OpenCV直方图

news2024/11/15 12:20:09

目录

一、环境

二、直方图原理概述

三、代码


一、环境

本文使用环境为:

  • Windows10
  • Python 3.9.17
  • opencv-python 4.8.0.74

二、直方图原理概述

OpenCV是一个广泛使用的开源计算机视觉库,它提供了许多用于图像处理和分析的函数和算法。其中,直方图是一种常用的图像分析工具,它可以用来描述图像的像素值分布情况。OpenCV提供了多种直方图函数,可以生成各种类型的直方图,包括灰度直方图、彩色直方图、积分直方图等。

灰度直方图是描述图像亮度分布的直方图。它显示了每个像素值出现的频率,横轴表示像素值,纵轴表示频率。灰度直方图可以帮助我们了解图像的亮度分布情况,例如图像的对比度和亮度是否合适,是否存在过曝或欠曝等问题。

彩色直方图是描述图像颜色分布的直方图。它显示了每个颜色通道的像素值分布情况,横轴表示像素值,纵轴表示频率。彩色直方图可以帮助我们了解图像的颜色分布情况,例如图像的主要颜色和色彩平衡是否合适,是否存在颜色偏差等问题。

积分直方图是一种扩展了直方图概念的函数,它不仅可以描述像素值的分布情况,还可以描述像素值的累积分布情况。积分直方图的横轴表示像素值,纵轴表示该像素值以下的所有像素值的频率之和。积分直方图可以帮助我们了解图像的整体分布情况,例如图像的整体亮度分布和颜色分布是否合适。

OpenCV中生成直方图的函数包括calcHistcalcHist的改进版本calcHistcompareHist等。其中,calcHist函数可以计算一维或二维直方图,可以应用于灰度图像或彩色图像的直方图计算。compareHist函数可以比较两个直方图,用于识别和比较不同图像的直方图。此外,OpenCV还提供了其他一些函数和算法,例如直方图均衡化、直方图规定化等,可以进一步扩展直方图的应用范围。

总的来说,OpenCV的直方图功能非常强大且灵活,可以应用于各种不同的计算机视觉任务中。通过使用OpenCV的直方图函数和算法,我们可以更好地理解和分析图像数据,提高计算机视觉系统的性能和准确性。

最简代码:

from __future__ import print_function
import cv2 as cv
import argparse

parser = argparse.ArgumentParser(description='Code for Histogram Equalization tutorial.')
parser.add_argument('--input', help='Path to input image.', default='lena.jpg')
args = parser.parse_args()

src = cv.imread(cv.samples.findFile(args.input))
if src is None:
    print('Could not open or find the image:', args.input)
    exit(0)
src = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
dst = cv.equalizeHist(src)
cv.imshow('Source image', src)
cv.imshow('Equalized Image', dst)
cv.waitKey()

三、代码

OpenCV提供了用于计算数组集(通常是图像或分割后的通道)直方图的函数calcHist,该函数支持最高达32维的直方图。在调用calcHist函数时,需要传入一些参数,包括:

  • images:输入数组,通常为图像;
  • channels:指定要计算直方图的通道;如果设置为0,则表示计算所有通道的直方图;
  • mask:掩码图像;
  • histSize:用于表示直方图大小的整数或浮点数;如果设置为整型值(如[16, 16]),则两个值分别代表直方图的高度和宽度。如果是浮点型值(如[16.0, 16.0]),则两个值必须相同且代表直方图的直径;
  • ranges:像素值范围;
  • hist:输出数组;
  • accumulate:布尔类型,用于设置是否将结果累积到输出数组中。

完整代码:

from __future__ import print_function
from __future__ import division
import cv2 as cv
import numpy as np
import argparse

def Hist_and_Backproj(val):
    bins = val
    histSize = max(bins, 2)
    ranges = [0, 180]
    ## 获取直方图并归一化
    hist = cv.calcHist([hue], [0], None, [histSize], ranges, accumulate=False)
    cv.normalize(hist, hist, alpha=0, beta=255, norm_type=cv.NORM_MINMAX)
    backproj = cv.calcBackProject([hue], [0], hist, ranges, scale=1)
    cv.imshow('BackProj', backproj)
    w = 400
    h = 400
    bin_w = int(round(w / histSize))
    histImg = np.zeros((h, w, 3), dtype=np.uint8)
    for i in range(bins):
        cv.rectangle(histImg, (i*bin_w, h), ( (i+1)*bin_w, h - int(np.round( hist[i]*h/255.0 )) ), (0, 0, 255), cv.FILLED)
    cv.imshow('Histogram', histImg)

## 读取图片
parser = argparse.ArgumentParser(description='Code for Back Projection tutorial.')
parser.add_argument('--input', help='Path to input image.', default='data/home.jpg')
args = parser.parse_args()

src = cv.imread(cv.samples.findFile(args.input))
if src is None:
    print('Could not open or find the image:', args.input)
    exit(0)
## 彩色图转到HSV空间
hsv = cv.cvtColor(src, cv.COLOR_BGR2HSV)
ch = (0, 0)
hue = np.empty(hsv.shape, hsv.dtype)
# 由于ch=(0, 0),所有这里就是:将hsv的0通道复制到hue的0通道
cv.mixChannels([hsv], [hue], ch)
## 创建滑条
window_image = 'Source image'
cv.namedWindow(window_image)
bins = 25
cv.createTrackbar('* Hue  bins: ', window_image, bins, 180, Hist_and_Backproj )
Hist_and_Backproj(bins)
## 可视化
cv.imshow(window_image, src)
cv.waitKey()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设置 wsl 桥接模式

一、环境要求 Win10/Win11 专业版&#xff0c;并已安装 Hyper-V 二、具体步骤 打开 Hyper-V 管理器 创建虚拟交换机 WSL Bridge 修改wsl配置文件 .wslconfig .wslconfig 文件所在路径如下&#xff1a; C:\Users\<UserName>\.wslconfig若 .wslconfig 文件不存在&am…

Sam Altman 或回归 OpenAI;格力 1.3 万研发人员没有海归派 外国人丨 RTE 开发者日报 Vol.86

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

《Python数据科学项目实战》:开启数据科学之旅的实战指南!

《Python数据科学项目实战》是一本内容丰富且组织结构严谨的书籍&#xff0c;它旨在帮助读者通过实际案例研究掌握使用Python进行数据科学工作的必要知识。本书的案例研究涵盖了在线广告分析、使用新闻数据跟踪疾病暴发等多个现实世界的场景&#xff0c;使读者能够将所学知识应…

NOSQL----redis的安装和基础命令

redis是什么 1.redis-------非关系型数据库 redis是非关系数据库的一种&#xff0c;也称为缓存型数据库。 非关系型数据库和关系型数据库 1.关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;记录方式是行和列&#xff08;列&#xff1a;声明对象&#xff0c;行&am…

【unity实战】unity3D中的PRG库存系统和换装系统(附项目源码)

文章目录 先来看看最终效果前言素材简单绘制库存UI前往mixamo获取人物模型动画获取一些自己喜欢的装备物品模型库存系统换装系统装备偏移问题添加消耗品最终效果源码完结 先来看看最终效果 前言 之前2d的换装和库存系统我们都做过不少了&#xff0c;这次就来学习一个3d版本的&…

有哪些相见恨晚的stm32学习的方法?

有哪些相见恨晚的stm32学习的方法&#xff1f; 单片机用处这么广&#xff0c;尤其是STM32生态这么火&#xff01;如何快速上手学习呢&#xff1f; 你要考虑的是&#xff0c;要用STM32实现什么&#xff1f;为什么使用STM32而不是用8051&#xff1f;是因为51的频率太低&#xff…

五分钟搭建开源ERP:Odoo,并实现公网远程访问

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

建筑可视化中的 3D 纹理

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是 3D 纹理&#xff1f; 纹理是将二维图像添加到三维模型的技术艺术。虽然对物体进行纹…

Python懒羊羊

目录 系列文章 写在前面 绘图基础 懒羊羊 写在后面 系列文章 序号文章目录直达链接表白系列1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595…

2023年A特种设备相关管理(锅炉压力容器压力管道)证模拟考试题库及A特种设备相关管理(锅炉压力容器压力管道)理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;证模拟考试题库及A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;理论考试试题是由安全生产模拟考试一点通提供&#xff0c;A特…

【带头学C++】----- 七、链表 ---- 7.5 学生管理系统(链表--下)

目录 1.补充上节插入节点的第三种方法&#xff08;按序插入&#xff09; 图示说明需求原理&#xff1a; 代码实现&#xff1a; 实际效果&#xff1a; 2.查询链表节点 1.方法调用 2.搜索函数实现 3.搜索功能结果展示测试 3.删除链表 1.图示删除链表的原理 ​编辑 2…

Thinkphp6实现定时任务功能

本文主要介绍命令启动定时任务的功能&#xff0c;按照CRMEB标准版的程序为大家详细的进行实现过程的介绍 首先创建安装Worker&#xff0c;执行composer require topthink/think-worker 安装在config/console.php中定义指令 timer > \crmeb\command\Timer::class 3. 对应图1…

vue3-组合式API

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-组合式API 目录 组合式API 1.1 什么是组合式API 1.2 为什么使用它 1.2.1 更好的逻辑复用#…

AutoSAR CANIF层配置代码分析

CAN物理控制单元 配置&#xff1a; 生成的代码&#xff1a; CanIf_CtrlStates 解析 类型&#xff1a; typedef union CanIf_CtrlStatesUTag {CanIf_CtrlStatesType raw[3];CanIf_CtrlStatesStructSType str; }CanIf_CtrlStatesUType;typedef struct sCanIf_CtrlStatesType {C…

Sublime Text:代码编辑器的卓越典范

Sublime Text是一款高效、强大且灵活的代码编辑器&#xff0c;在开发社区中广受欢迎。它不仅提供了丰富的功能&#xff0c;还具备美观的界面和卓越的性能&#xff0c;成为了众多开发者的首选工具。 Sublime Text的优点 高性能&#xff1a;Sublime Text具有极高的启动速度和响…

软件测试入门很容易,但想要深造就还是要费功夫

现如今&#xff0c;越来越多的外行人员开始转战到软件测试岗位&#xff0c;而这也让许多不了解软件测试人疑惑“软件测试有那么好学吗&#xff1f;为什么都开始转行到软件测试呢&#xff1f;” 而关于这两个问题的答案&#xff0c;作者在以下为大家进行了讲解&#xff0c;希望…

ts学习04-Es5中的类和静态方法 继承

最简单的类 function Person() {this.name "张三";this.age 20; } var p new Person(); console.log(p.name);//张三构造函数和原型链里面增加方法 function Person(){this.name张三; /*属性*/this.age20;this.runfunction(){console.log(this.name在运动);} }…

公网环境下使用VNC远程连接Ubuntu系统桌面

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

ARCGIS网络分析

一、实验名称&#xff1a; 网络分析 二、实验目的&#xff1a; 通过本实验练习&#xff0c;掌握空间数据网络分析的基本方法。 三、实验内容和要求&#xff1a; 实验内容&#xff1a; 利用ARCGIS软件网络分析工具及相关空间数据&#xff0c;查找距离“名人故居”、“博物…

open3d ICP 配准

文章目录 Three common registration techniquesPoint-to-point techniquePoint-to-plane registration ICP registrationHelper visualization functionInputGlobal registrationExtract geometric featureInputRANSAC Point-to-point ICPPoint-to-plane ICP References Three…