OpenCV基于Python二维直方图

本文详细介绍了如何使用OpenCV和Numpy在Python中计算二维直方图,以及如何使用cv.imshow()和Matplotlib进行绘制。通过示例展示了颜色直方图在HSV空间中的应用,帮助理解直方图反向投影等高级概念。

目标

在本篇文章中,我们将学习查找和绘制2D直方图,包括以下内容:

  • OpenCV中的二维直方图
  • Numpy中的二维直方图
  • 绘制二维直方图
  • 示例补充

前言

在直方图板块的第一篇文章图像直方图的查找、绘制和分析中,我们计算并绘制了一维直方图, 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值。 但是在二维直方图中,需要考虑两个特征,通常,它用于查找颜色直方图,其中两个特征是每个像素的色相和饱和度值。我们将尝试了解如何创建这种颜色直方图,它将有助于理解像直方图反向投影这样的更深入的内容。

1. OpenCV中的二维直方图

它非常简单,并且使用相同的函数cv.calcHist()进行计算。 对于颜色直方图,我们需要将图像从BGR转换为HSV。(请记住,对于一维直方图,我们从BGR转换为灰度)。对于二维直方图,其参数将进行如下修改:

  • channel = [0,1],因为我们需要同时处理H和S平面。
  • bins = [180,256] 对于H平面为180,对于S平面为256。
  • range = [0,180,0,256] 色相值介于0和180之间,饱和度介于0和256之间。

演示代码1:

import numpy as np
import cv2 as cv

# 加载原始图像
img = cv.imread('./data/leuvenA.jpg')
# 显示原始图像
cv.imshow('img2', img)
# 转化为HSV
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
# 显示HSV图像
cv.imshow('hsv', hsv)
# cv.calcHist() 来查找整个图像的二维直方图
hist = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
# 可调整窗口大小
cv.namedWindow('2Dhist_img', 0)
# 显示二维直方图
cv.imshow('2Dhist_img', hist) # 显示图像窗口较小,窗口可调整
cv.waitKey()

原始图像

图1 原始图像

HSV图像

图2 HSV图像

OpenCV中的二维直方图

图3 OpenCV中的二维直方图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值