opencv入门9:直方图-histogram

opencv入门9:直方图-histogram,第1张

什么是直方图呢?通过直方图你可以对整幅图像灰度分布有一个整体的了解。直方图的x 轴是灰度值(0 到255),y 轴是中具有同一个灰度值的点的数目。

直方图其实就是对图像的另一种解释。一下图为例,通过直方图我们可以对图像的对比度,亮度,灰度分布等有一个直观的认识。几乎所有的图像处理软件都提供了直方图分析功能。下图来自Cambridge in Color website,强烈推荐你到这个网站了解更多知识。

让我们来一起看看这幅和它的直方图吧。(要记住,直方图是根据灰度图像绘制的,而不是彩色图像)。直方图的左边区域像是了暗一点的像素数量,右侧显示了亮一点的像素的数量。从这幅图上你可以看到灰暗的区域比两的区域要大,而处于中间部分的像素点很少。

BINS:上面的直方图显示了每个灰度值对应的像素数。如果像素值为0到255,你就需要256 个数来显示上面的直方图。但是,如果你不需要知道

每一个像素值的像素点数目的,而只希望知道两个像素值之间的像素点数目怎么办呢?举例来说,我们想知道像素值在0 到15 之间的像素点的数目,接着

是16 到31,…,240 到255。我们只需要16 个值来绘制直方图。OpenCV Tutorials on histograms中例子所演示的内容。

那到底怎么做呢?你只需要把原来的256 个值等分成16 小组,取每组的总和。而这里的每一个小组就被成为BIN。第一个例子中有256 个BIN,第二个例子中有16 个BIN。在OpenCV 的文档中用histSize 表示BINS。

DIMS:表示我们收集数据的参数数目。在本例中,我们对收集到的数据只考虑一件事:灰度值。所以这里就是1。RANGE:就是要统计的灰度值范围,一般来说为[0,256],也就是说所有的灰度值

蓝色阴影表示低像素计数,而红色阴影表示大像素计数(即,2D图形中的峰值)

直方图均衡通过“拉伸”像素的分布来改善图像的对比度。

应用直方图均衡会将峰值拉向图像的角落,从而改善图像的全局对比度。直方图均衡适用于灰度图像

执行直方图均衡仅使用单个函数完成:cv2equalizeHist(image)它接受一个单一的参数,灰度图像,我们要执行直方图均衡。

在给定图像的直方图中,我们得到图像中出现的所有像素值的频率。#include <stdioh> #include <conioh> int whichshade(int pixelvalue) { int i=0; for(i=0;i<256;i++) if(pixelvalue==i) break; return i; } //这个方法以列表方式显示直方图 //你能够把这些值传递给图形软件 //来查看其图形。我使用Excel来绘制曲线 void displaypixelstats(int pixelcounts[]) { int i=0; for(i=0;i<256;i++) printf("Gray Scale Shade : %d Count : %d\n",i,pixelcounts[i]); } int main() { char file[20]; int pixelvalue; //图像计数器容器 int pixelcounts[255]; FILE fp; int i; //初始化容器 for(i=0;i<256;i++) pixelcounts[i]=0; printf("Enter the gray scale image file name :"); fflush(stdin); scanf("%s",file); fp = fopen(file,"r"); while(!feof(fp)) { fscanf(fp,"%d",&pixelvalue); pixelcounts[whichshade(pixelvalue)]++; } fclose(fp); displaypixelstats(pixelcounts); getch(); return 0; }

OpenCV中分析绘制直方图并没有直接可用的函数,以下是绘制直方图统计的一种实现。

paint_histogramh:

paint_histogramcpp如下所示:

main函数调用如下:

执行结果如下:

内容来自于书籍。

[m,n]=size(I); %I 为灰度图像

h=zeros(1,256);

for i=1:m

for j=1:n

h(I(i,j))=h(I(i,j))+1;

end

end

%%a为你的二值化矩阵

[m,n]=find(a==1);

zuobiao=[m,n];

%%结果存在D盘,名字为aaa的excel中

xlswrite('D:\aaa',zuobiao);

以上就是关于opencv入门9:直方图-histogram全部的内容,包括:opencv入门9:直方图-histogram、如何得到256级灰度图像的直方图、计算绘制图像灰度直方图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9614057.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存