OpenCV直方图-二维直方图

1.计算二维直方图

OpenCV中的二维直方图

主要使用cv.calcHist()函数来实现。

函数具体介绍见OpenCV直方图-查找、绘制和分析.

对于颜色直方图,我们需要将图像从BGR转换为HSV。对于二维直方图,
其参数将进行如下修改:

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

代码示例:

import cv2 as cv
img = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac1.jpg')
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
hist1 = cv.calcHist(hsv, [0, 1], None, [180, 256], [0, 180, 0 , 256])

Numpy中的二维直方图

主要使用np.histogram2d()函数来实现。

numpy.histogram2d(x, y, bins=10, range=None, normed=None, weights=None, density=None)

参数如下:

  • x:包含要直方图的点的x坐标的数组
  • y:包含要直方图的点的y坐标的数组
  • bins:可选参数,每个bin的数量
  • range:可选参数。沿每个维度的仓的最左边和最右边(如果未在bins参数中明确指定):[[xmin, xmax], [ymin, ymax]]。所有超出此范围的值都将被视为离群值,并且不会在直方图中列出
  • density:可选参数。如果默认值为False,则返回每个bin中的样本数。如果为True,则在bin处返回概率密度函数
  • normed:bool, 可选参数。密度参数的别名
  • weights:可选参数。如果normed为True,则将权重标准化为1。如果normed为False,则返回的直方图的值等于属于每个bin的样本的权重之和。
  • 返回值:
    ①样本x和y的直方图。 x中的值沿第一维直方图,y中的值沿第二维直方图
    ②x边缘数组,形状(nx+1,),bin沿第一个维度边缘
    ③y边缘数组,形状(ny+1,),bin沿第二个维度边缘

代码示例:

import numpy as np
import cv2 as cv
img = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac1.jpg')
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
h,s=hsv[:,:,0],hsv[:,:,1]
hist2, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])

2.绘制二维直方图

使用cv.imshow()函数

代码示例:

import numpy as np
import cv2 as cv
img = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac1.jpg')
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
h,s=hsv[:,:,0],hsv[:,:,1]
hist1 = cv.calcHist(hsv, [0, 1], None, [180, 256], [0, 180, 0 , 256])
hist2, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])
cv.imshow("prac1", hist1)
cv.imshow("prac2", hist2)
cv.waitKey(0)
cv.destroyAllWindows()

使用Matplotlib

代码示例:

from matplotlib import pyplot as plt
import numpy as np
import cv2 as cv
img = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac.jpg')
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
h,s=hsv[:,:,0],hsv[:,:,1]
hist1 = cv.calcHist(hsv, [0, 1], None, [180, 256], [0, 180, 0 , 256])
hist2, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])
plt.subplot(1, 2, 1)
plt.imshow(hist1)
plt.subplot(1, 2, 2)
plt.imshow(hist2)
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值