python 简单图像处理(7) 计算直方图
2010-12-27 12:54
746 查看
好啦。现在我们来介绍下图像的直方图
说白了,直方图就是统计图像中像素点为某值的个数
对于8位灰度图来说,颜色有256级,统计每级的个数
然后把结果用图表表示出来就可以了
看看程序吧
我们先统计各灰度值像素点个数
然后我们把个数值映射到(0,200)的范围
方便我们画图
我们来看看结果吧。
还可以啦
其实OpenCV提供了直方图函数
我简单看了下,没有丝毫思路,以后看懂了再来对比一下
现在我们把一幅图的三个通道放开来看看吧
有一点要说明的是OpenCV中每个像素三色是按照BGR排列的
运行效果
这些直方图有什么作用呢?
以后再来说明
说白了,直方图就是统计图像中像素点为某值的个数
对于8位灰度图来说,颜色有256级,统计每级的个数
然后把结果用图表表示出来就可以了
看看程序吧
import cv def Hist(image): 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) c = cv.RGB(200,150,255) for k in range(256): a[k] = a[k]*200/S x = (k,255) y = (k,255-a[k]) cv.Line(iHist,x,y,c) return iHist 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排列的
运行效果
这些直方图有什么作用呢?
以后再来说明
相关文章推荐
- 用python简单处理图片(5):图像直方图
- 用python简单处理图片(5):图像直方图
- 用python简单处理图片(5):图像直方图
- 用python简单处理图片(5):图像直方图
- python 简单图像处理(4) 旋转
- Python3与OpenCV3.3 图像处理(十一)--图像直方图
- python数字图像处理(10):图像简单滤波
- Python图像处理(5):直方图
- Python 处理遥感图像:光谱辐射定标、大气校正和计算反射率
- 用python简单处理图片(1):打开\显示\保存图像
- Python来完成简单图像处理任务
- 用python简单处理图片(4):图像中的像素访问
- [Python] 图像简单处理(PIL or Pillow)
- Python之简单的图像处理
- 用python简单处理图片(2):图像通道\几何变换\裁剪
- python数字图像处理(9):直方图与均衡化
- OpenCV之imgproc 模块. 图像处理(4)直方图均衡化 直方图计算 直方图对比 反向投影 模板匹配
- [Python] 图像简单处理(PIL or Pillow)
- 使用python的PIL库简单的处理图像
- 用python简单处理图片(4):图像中的像素访问