OpenCV中的二维直方图实现与Numpy有何不同
Admin 2022-05-25 群英技术资讯 996 次浏览
今天就跟大家聊聊有关“OpenCV中的二维直方图实现与Numpy有何不同”的内容,可能很多人都不太了解,为了让大家认识和更进一步的了解,小编给大家总结了以下内容,希望这篇“OpenCV中的二维直方图实现与Numpy有何不同”文章能对大家有帮助。只统计像素的灰度值这一特征,可将其成为一维直方图。二维直方图可以统计像素的色相和饱和度,用于查找图像的颜色直方图。
OpenCV仍然使用cv2.calcHist()函数来查找图像的颜色直方图,只是在指定参数时与之前有所区别。
cv2.calcHist()函数的基本格式如下:
hist =cv2.calcHist(image, channels, mask, histSize, ranges)
image参数指定的原图像应从BGR色彩空间转换为HSV色彩空间, 实际参数需要用方括号括起来
channels参数设置为[0,1]时, 表示同时处理色相和饱和度
histSize参数设置BINS值为[180,256]时, 表示色相为180, 饱和度为256
ranges参数设置为[0,180,0,256]时, 表示色相的取值范围为[0,180], 饱和度的取值范围为[0,2565]
cv2.calcHist()函数返回的颜色直方图可以直接使用cv2.show()函数显示。
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('XIAN.jpg')
cv2.namedWindow('orininal', cv2.WINDOW_NORMAL)
cv2.imshow('orininal', img)
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([img2], [0, 1], None, [180, 256], [0,180,0,256])
cv2.namedWindow('2DHist', cv2.WINDOW_NORMAL)
cv2.imshow('2DHist', hist)
cv2.waitKey(0)
cv2.destroyAllWindows()
plt.imshow(hist, interpolation = 'nearest') # 绘制颜色直方图
plt.show() # 显示颜色直方图

cv2.calcHist()函数返回的颜色直方图是一个大小为180*256的二维数组,用cv2.imshow()函数显示时是一副灰度图像,不能直接显示出颜色的分布情况。
可以使用matplotlib.pyplot.imshow()函数绘制具有不同颜色的二维直方图。

Numpy的np.histogram2d()函数用于计算二维直方图,其基本格式如下:
hist, xedges, yedges = np.histogram2d(x, y, bins, range)
hist为返回的直方图
xedges为返回的x的直方图的BINS边界值
yedges为返回的y的直方图的BINS边界值
x和y为原图对应通道转换成的一维数组
bins为BINS的值, 如[180,256]
range为像素范围, 格式为[[0, 180],[0, 256]]
img = cv2.imread('building.jpg')
cv2.imshow('orininal', img)
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(img2)
hist, x, y = np.histogram2d(h.ravel(), s.ravel(), [180, 256], [[0, 180],[0, 256]])
cv2.imshow('2DHist', hist)
cv2.waitKey(0)
cv2.destroyAllWindows()
plt.imshow(hist, interpolation = 'nearest')
plt.show()

可以使用matplotlib.pyplot.imshow()函数绘制具有不同颜色的二维直方图。

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('home.jpg')
plt.figure(figsize = (25,25))
imgrgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.subplot(2, 2, 1)
plt.title('Original')
plt.axis('off')
plt.imshow(imgrgb)
histb, e1 = np.histogram(img[0].ravel(), 256, [0, 255]) #计算B通道直方图
histg, e2 = np.histogram(img[1].ravel(), 256, [0, 255]) #计算G通道直方图
histr, e3 = np.histogram(img[2].ravel(), 256, [0, 255]) #计算R通道直方图
plt.subplot(2, 2, 2)
plt.plot(histb, color = 'b')
plt.plot(histg, color = 'g')
plt.plot(histr, color = 'r')
plt.title('Hist')
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #转换色彩空间为HSV
h, s, v = cv2.split(img2)
hist, x, y=np.histogram2d(h.ravel(), s.ravel(), [180, 256], [[0, 180], [0, 256]]) #计算颜色直方图
plt.subplot(2, 2, 3)
plt.title('2Dhist') #设置子图窗口标题
plt.imshow(hist, interpolation = 'nearest',cmap = 'gray') #绘制颜色直方图
plt.show() #显示颜色直方图

# 2.使用OpenCV函数计算直方图
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('flower.jpg')
plt.figure(figsize = (25,25))
imgrgb=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.subplot(2, 2, 1)
plt.imshow(imgrgb)
plt.title('Original')
plt.axis('off')
histb = cv2.calcHist([img], [0], None, [256], [0,255]) #计算B通道直方图
histg = cv2.calcHist([img], [1], None, [256], [0,255]) #计算G通道直方图
histr = cv2.calcHist([img], [2], None, [256], [0,255]) #计算R通道直方图
plt.subplot(2, 2, 2)
plt.plot(histb, color= 'b')
plt.plot(histg, color= 'g')
plt.plot(histr, color= 'r')
plt.title('Hist')
img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([img2], [0, 1], None, [180, 256], [0, 180, 0, 256])
plt.subplot(2, 2, 3)
plt.title('2Dhist') #设置子图窗口标题
plt.imshow(hist,interpolation = 'nearest',cmap = 'gray') #绘制颜色直方图
plt.show() #显示颜色直方图

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
现在重新稍微系统的介绍一下ResNet网络结构。 ResNet结构首先通过一个卷积层然后有一个池化层,然后通过一系列的残差结构,最后再通过一个平均池化下采样操作,以及一个全连接层的得到了一个输出。ResNet网络可以达到很深的层数的原因就是不断的堆叠残差结构而来的。
这篇文章我们将介绍10个示例,从而帮助大家掌握如何使用Python中的Seaborn库来创建图表。文中示例代码讲解详细,感兴趣的可以了解一下
我们在日常工作中,常常会用到需要周期性执行的任务,下面这篇文章主要给大家介绍了关于Python脚本实现定时任务的最佳方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
一个APP对应一个默认数据库,若连接其他数据库用".using()"Author.objects.using('db02').all()1、在项目settings中增加数据库配置# settings.py DATABASES = { 'default':
本文主要和大家介绍了详解Python中clip与range函数的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参,希望能帮助到大家
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008