python 直方图统计_python 简单图像处理(7) 计算直方图

好啦。现在我们来介绍下图像的直方图

说白了,直方图就是统计图像中像素点为某值的个数

对于8位灰度图来说,颜色有256级,统计每级的个数

然后把结果用图表表示出来就可以了

看看程序吧

importcvdefHist(image):

a=[0]*256w=image.width

h=image.height

iHist=cv.CreateImage((256,256),8,3)foriinrange(h):forjinrange(w):

iGray=int(image[i,j])

a[iGray]=a[iGray]+1S=max(a)

c=cv.RGB(200,150,255)forkinrange(256):

a[k]=a[k]*200/S

x=(k,255)

y=(k,255-a[k])

cv.Line(iHist,x,y,c)returniHist

image=cv.LoadImage('lena.jpg',0)

iHist=Hist(image)

cv.ShowImage('image',image)

cv.ShowImage('iHist',iHist)

cv.WaitKey(0)

我们先统计各灰度值像素点个数

然后我们把个数值映射到(0,200)的范围

方便我们画图

我们来看看结果吧。

还可以啦

其实OpenCV提供了直方图函数

我简单看了下,没有丝毫思路,以后看懂了再来对比一下

现在我们把一幅图的三个通道放开来看看吧

import cv

def Hist(image,color = cv.RGB(255,255,255)):

a = [0]*256

w = image.width

h = image.height

iHist = cv.CreateImage((256,256),8,3)

for i in range(h):

for j in range(w):

iGray = int(image[i,j])

a[iGray] = a[iGray] + 1

S = max(a)

for k in range(256):

a[k] = a[k]*200/S

x = (k,255)

y = (k,255-a[k])

cv.Line(iHist,x,y,color)

return iHist

def GetChannel(image,num):

w = image.width

h = image.height

size = (w,h)

iGetChannel = cv.CreateImage(size,image.depth,1)

for i in range(h):

for j in range(w):

iGetChannel[i,j] = image[i,j][num]

return iGetChannel

image = cv.LoadImage('lena.jpg',0)

image2 = cv.LoadImage('lena.jpg',1)

iHist = Hist(image)

iRed = GetChannel(image2,2)

iGreen = GetChannel(image2,1)

iBlue = GetChannel(image2,0)

iHistRed = Hist(iRed,cv.RGB(255,0,0))

iHistGreen = Hist(iGreen,cv.RGB(0,255,0))

iHistBlue = Hist(iBlue,cv.RGB(0,0,255))

cv.ShowImage('image',image)

cv.ShowImage('iRed',iRed)

cv.ShowImage('iGreen',iGreen)

cv.ShowImage('iBlue',iBlue)

cv.ShowImage('iHist',iHist)

cv.ShowImage('iHistRed',iHistRed)

cv.ShowImage('iHistGreen',iHistGreen)

cv.ShowImage('iHistBlue',iHistBlue)

cv.WaitKey(0)

有一点要说明的是OpenCV中每个像素三色是按照BGR排列的

运行效果

这些直方图有什么作用呢?

以后再来说明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值