OpenCV中分析绘制直方图并没有直接可用的函数,以下是绘制直方图统计的一种实现。
paint_histogramh:
paint_histogramcpp如下所示:
main函数调用如下:
执行结果如下:
内容来自于书籍。
MATLAB
命令:I=imread('bmp格式的图像');
a=rgb2gray(b);
imhist(a);
VB,imhist也行
要有C语言用for(i=0;i<256;i++)
{
m_count[i]=0;
}
for(i=0;i<m_Height;i++)
for(j=0;j<m_Width;j++)
{
lpSrc=(unsigned char)m_lpDIBBits+((m_Width8+31)/324)i+j;
m_count[lpSrc]++;
}
也行。。。。。。。
img=imread('myImgjpg');
my_hist=imhist(img);
% 直方图的结果是一个向量,每一位对应一个统计数值,相应灰度值的像素个数直接访问就好了
nb_pixels=my_hist(x+1); % 比如 灰度值为x的像素个数 (注意要加1,因为像素值从0开始)。
我想说的是,sum是求图像矩阵f的列的和,X=sum(f)然后返回一个1行3列的向量放到X中,每列存有RGB各分量的总和,而Y=sum(f');同样的道理,直方图是针对单变量的数据统计,据我所知,MATLAB存储的默认是RGB格式,只要是一副图,无论怎么取直方图,RGB各分量的直方图都是一样的,和垂直到某个坐标轴没有关系,这个你可以直接用IMhist和BAR函数直接求出,你求出的XY对于直方图没有意义!
暗图像对应的直方图组成成分几种在灰度值较小的左边一侧
明亮的图像的直方图则倾向于灰度值较大的右边一侧
对比度较低的图像对应的直方图窄而集中于灰度级的中部
对比度高的图像对应的直方图分布范围很宽而且分布均匀
因此,直方图反映了图像的清晰程度,当直方图分布均匀时,图像最清晰。
提取程序源代码:
function IMG_Out=Circle_Region_Extract(IMG_In,Radius,Center)
if ~(abs(Center(1)-Radius)<0 & abs(Center(2)-Radius)<0) [m,n,~]=size(IMG_In); [X,Y]=meshgrid(1:n,1:m);
R_temp=sqrt((X-Center(1))^2+(Y-Center(2))^2); R_temp1=R_temp<=Radius; if(numel(size(IMG_In))>2)
R_Out=R_temp1im2double(IMG_In(:,:,1)); G_Out=R_temp1im2double(IMG_In(:,:,2)); B_Out=R_temp1im2double(IMG_In(:,:,3)); IMG_Out(:,:,1)=R_Out; IMG_Out(:,:,2)=G_Out; IMG_Out(:,:,3)=B_Out; else
IMG_Out=R_temp1im2double(IMG_In); end else
disp('exceed Radius'); end
imshow(IMG_Out);
例子:
某一通道灰度图
I=imread('C:\Users\Administrator\Desktop\Ajpg'); I1=Circle_Region_Extract(I(:,:,1),300,[700,840]);
效果图如下:
以上就是关于计算绘制图像灰度直方图全部的内容,包括:计算绘制图像灰度直方图、什么软件能直接获得图片的灰度直方图HISTOGRAM、matlab 怎么看一个灰度直方图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)