精华内容
下载资源
问答
  • 使用opencv绘制灰度图像直方图
    千次阅读
    2021-12-24 10:24:08

            图像直方图是图像处理中非常重要的像素统计结果。图像直方图不再表征任何的图像纹理信息,而是对图像像素的统计。

            在OpenCV4中,提供了图像直方图的统计函数calcHist(),该函数能够统计出图像中每个灰度值的个数,但是对于直方图的绘制需要我们自己进行。calcHist()函数原型如下所示:

    void cv::calcHist(const Mat * images,
                      int nimages,
                      const int * channels,
                      InputArray mask,
                      OutputArray hist,
                      int dims,
                      const int * histSize,
                      const float ** ranges,
                      bool uniform = true,
                      bool accumulate = false
                      )

    下面为绘制灰度图像的图像直方图的完整示例:

    #include <opencv2\opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    int main()
    {
    	Mat img = imread("G:\\书本内容\\OpenCV4快速入门\\learnOpenCV4-master\\data\\apple.jpg");
    	if (img.empty())
    	{
    		cout << "请确认图像文件名称是否正确" << endl;
    		return -1;
    	}
    	Mat gray;
    	cvtColor(img, gray, COLOR_BGR2GRAY);
    	//设置提取直方图的相关变量
    	Mat hist;  //用于存放直方图计算结果
    	const int channels[1] = { 0 };  //通道索引
    	float inRanges[2] = { 0,255 };
    	const float* ranges[1] = { inRanges };  //像素灰度值范围
    	const int bins[1] = { 256 };  //直方图的维度,其实就是像素灰度值的最大值
    	calcHist(&gray, 1, channels, Mat(), hist, 1, bins, ranges);  //计算图像直方图
    																//准备绘制直方图
    	int hist_w = 512;
    	int hist_h = 400;
    	int width = 2;
    	Mat histImage = Mat::zeros(hist_h, hist_w, CV_8UC3);
    	for (int i = 1; i <= hist.rows; i++)
    	{
    		rectangle(histImage, Point(width*(i - 1), hist_h - 1),
    			Point(width*i - 1, hist_h - cvRound(hist.at<float>(i - 1) / 15)),
    			Scalar(255, 255, 255), -1);
    	}
    	namedWindow("histImage", WINDOW_AUTOSIZE);
    	imshow("histImage", histImage);
    	imshow("gray", gray);
    	waitKey(0);
    	return 0;
    }

    程序运行结果:

    更多相关内容
  • 一个简单的灰度图像直方图显示程序,需要有一张灰度图,同时改变图片名称
  • """对一幅灰度图像进行直方图均衡化""" #计算图像的直方图 #在numpy中,也提供了一个计算直方图的函数histogram(),第一个返回的是直方图的统计量,第二个为每个bins的中间值 imhist,bins = histogram(im.flatten...
  • OpenCV图像灰度直方图

    2019-11-01 10:04:01
    OpenCV计算图像灰度直方图,绘制图像灰度直方图灰度分布。
  • 灰度图像直方图计算

    2013-10-20 22:17:47
    编程实现灰度图像直方图计算,里面含有256*256灰度图一幅,可以完美运行
  • 灰度直方图,利用matlab实现图像直方图均衡化
  • matlab 自编灰度图像直方图 源程序 调试通过
  • Qt实现一个图像灰度直方图。使用QImage读取图像,QCustomPlot实现直方图。Qt实现一个图像灰度直方图。使用QImage读取图像,QCustomPlot实现直方图
  • 今天小编就为大家分享一篇Python cv2 图像自适应灰度直方图均衡化处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 灰度图像直方图代码

    2013-10-09 20:31:41
    此代码很好的实现了灰度图像直方图,内容很全,可以实现一般直方图和归一化直方图
  • 数字图像处理实验(1)--灰度图的直方图均衡化。编程实现灰度图像直方图均衡化处理。要求给出原始图像的直方图、均衡化图像及其直方图直方图均衡化时所用的灰度级变换曲线图。
  • 显示图像直方图直方图均衡化用于增强图像的对比度,并显示直方图均衡化前后的图像图像直方图的matlab程序

    程序内容描述如下:

    1.显示图像的直方图
    2.直方图均衡化用于增强图像的对比度,并显示直方图均衡化前后的图像与图像的直方图

    程序代码如下:

    %Part 1
    h=imread('cameraman.tif');
    subplot(1,2,1),imshow(h);
    subplot(1,2,2),imhist(h),
    grid on,
    ylabel('pixel count');
    %Part 2
    h=imread('cameraman.tif');
    subplot(1,6,1),imshow(h);
    g=histeq(h,40:60);
    j=imadjust(h,[0.3,0.7],[]);
    subplot(1,6,2),imshow(g);
    subplot(1,6,5),imhist(g);
    subplot(1,6,3),imshow(j);
    subplot(1,6,6),imhist(j);
    subplot(1,6,4),imhist(h),
    grid on,
    ylabel('pixel count');

    程序原理如下:

    part1,使用imread函数读取电脑磁盘中的图像cameraman.tif,使用函数imshow在图像窗口中显示图像,然后使用函数imhist获取图像的直方图并在图像窗口中显示。

    part2, 分别使用函数histeq和函数imadjust来均衡图像cameraman.tif的直方图,以增强图像对比度。我们使用函数imshow在图像窗口中显示原始图像、由函数histeq处理的图像和由函数imadjust处理的图像,然后使用函数imhist在图像窗口中显示三幅图像的直方图。

    程序运行结果如下:

    part1:

     图1:图像cameraman.tif及其直方图

    part2:

     图2:原始图像、增强对比度后的图像以及每幅图像的直方图

     看到这里的小伙伴别忘了点个赞再走哦!

    关注博主学习更多数字图像处理知识!

    展开全文
  • 应用MATLAB(或C)语言编写一幅灰度图像直方图统计程序
  • 图像灰度直方图

    千次阅读 2022-04-20 15:44:57
    1.灰度直方图的定义 1.1定义 灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计...1.2灰度图像展示 上图为月亮原图,下图为对应的灰度

    目录

    1.灰度直方图的定义

    1.1定义

    1.2灰度图像展示

    2.灰度直方图的性质

    2.1位置缺失性

    2.2图像的一对多特性

    2.3直方图的可叠加性

    3.直方图与图像清晰性的关系

    4.直方图均衡化


    1.灰度直方图的定义

    1.1定义

    灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率

    可表示为

    P(k)=\tfrac{n_{k}}{n} , k=0,1,···,L-1

    \sum_{k=0}^{L-1}P(k)=1

    式中,k为图像f(m,n)的第k级灰度值,n_{k}则为f(m,n)中灰度值为k的像素个数,n为图像的总像素个数,L为灰度级数。

    不同的灰度分布对应着不同的图像质量。灰度直方图能反映图像的概貌和质量,也是图像增强处理的重要依据

    1.2灰度图像展示

    上图为月亮原图,下图为对应的灰度直方图

    图像上的灰暗区域占了比较多的部分,从直方图看,在0-20灰度值(灰度值范围为0-255)的像素点较多,灰度值较大的像素点属于月球,直接看直方图可以清楚知晓图像概貌

    再看看这张mandi,与上图的月亮一样,均为MATLAB图库图片

    mandi这张图分辨率为3039*2014,而月球的图片分辨率为358*537,对比直方图各灰度值对应y轴的像素个数也能知道其分辨率更大

    2.灰度直方图的性质

    ——许录平《数字图像处理》(第二版) P65

    2.1位置缺失性

    现在只看mandi的这张灰度直方图,能看出大部分像素点灰度值都偏低,能推断出图像整体偏灰暗,但对各灰度值在图像中的空间分布毫无所知,这便是直方图的位置缺失性

    2.2图像的一对多特性

    ——许录平《数字图像处理》(第二版) P66

    上面三幅图的灰度直方图是一样的,因为它们黑色格子与白色格子所占面积是一样的。每幅灰度图像都只有一个对应的灰度直方图,而一个灰度直方图能够对应多幅灰度值出现频数分布相同的图片,此为直方图与图像的一对多特性

    2.3直方图的可叠加性

    在MATLAB找一张图片,比较经典的如下图的小女孩

     将图片拆分为4份

     

    4份图的直方图下图所示 

     再将4份直方图叠加起来,跟原图的灰度直方图对比,能够发现叠加后的直方图跟原直方图是一致的,这便是直方图的可叠加性

    3.直方图与图像清晰性的关系

    直方图像素点灰度级集中(直方图窄)的图像,对比度会比较低,图像看起来也不太清晰(参考上面的小女孩原图),如果图像直方图近似均匀分布,对应图像动态范围宽,对比度高,图像则相对清晰很多,如下图所示

    因此我们可以处理直方图来达到使图像清晰的目的,比如直方图均衡化,也可以对其进行灰度线性变化等操作来改变图像

    4.直方图均衡化

    直方图的均衡化可以看看我之前写的一篇文章:真彩色图像直方图均衡化及分别在RGB与HSI坐标系进行处理

    此文章主要介绍如何在MATLAB对灰度、真彩色图像进行直方图均衡化来增强图像对比度、清晰度,并讨论了分别在RGB和HSI坐标系进行均衡化会有那些不同。

    感谢您看到最后!

    如果觉得这片文章对你有用的话,能否点个赞再走呢?

    展开全文
  • 本文档讲如何显示灰度图的直方图? 二、代码实现 2.1 显示原图和直方图代码 read_image (Image, 'D:/images/maps/david.jpg') get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, ...

    一、说明

            halcon的数据可视化不是很发达。因此,做出数据表、曲线等,需要自己开发。本文讲如何显示灰度图的直方图。

     

    二、代码实现

    2.1 显示原图和直方图代码

    此为主调用函数,包括读入原图、生成直方图、显示直方图。

    read_image (Image, 'D:/images/maps/david.jpg')
    get_image_size (Image, Width, Height)
    dev_open_window (0, 0, Width, Height, 'black', WindowHandleImage)
    disp_image(Image, WindowHandleImage)
    dev_open_window (0, Width + 5, Width, Height, 'black', WindowHandleHisto)
    gray_histo(Image,Image, AbsoluteHisto, RelativeHisto)
    
    dev_set_window (WindowHandleHisto)
    dev_clear_window ()
    dev_set_draw ('fill')
    Min:=0
    Max:=255
    HistoBorder := 0.2
    plot_histo( AbsoluteHisto, WindowHandleHisto, 'Gray values', Min, Max, 'white', 'dim gray', HistoBorder)
    

    其中,plot_histo是自定义函数,下面介绍如何生成这个自定义函数。

    2.2 自定义函数plot_histo

    第一步:打开自定义函数菜单

     第二步:输入函数名

    第三步、输入参数

     

     第四步、将以下代码粘入

    
    * This procedure plots the Histogram within the value range
    * [LabelXMin,LabelXMax] into the WindowHandle by leaving a
    * relative Border around the plot.
    * 
    if (|Histogram| <= 0 or Border < 0 or Border >= 1)
        disp_message (WindowHandle, 'Failed to plot histogram', 'window', 12, 12, 'black', 'true')
        return ()
    endif
    * 
    * Determine the area to be used for the plot.
    get_part (WindowHandle, Row1, Column1, Row2, Column2)
    PlotAreaX := (Column2 - Column1 + 1) * (1 - Border * 2)
    PlotAreaY := (Row2 - Row1 + 1) * (1 - Border * 2)
    OriginX := Column1 + Border * (Column2 - Column1 + 1)
    OriginY := Row2 - Border * (Row2 - Column1 + 1)
    * 
    * Determine the extent of the function to be plotted
    MinY := min([Histogram,0])
    MaxY := max(Histogram)
    * 
    * Determine the scaling values
    ScaleX := PlotAreaX / |Histogram|
    if (MaxY == MinY)
        ScaleY := PlotAreaY
        MaxY := ''
    else
        ScaleY := PlotAreaY / (MaxY - MinY)
    endif
    * 
    * Display the histogram values
    polyX := []
    polyY := []
    for Value := 0 to |Histogram| - 1 by 1
        polyX := [polyX,OriginX + Value * ScaleX]
        polyY := [polyY,OriginY - (Histogram[Value] - MinY) * ScaleY]
        polyX := [polyX,OriginX + (Value + 1) * ScaleX]
        polyY := [polyY,OriginY - (Histogram[Value] - MinY) * ScaleY]
    endfor
    polyX := [polyX,OriginX + |Histogram| * ScaleX,OriginX]
    polyY := [polyY,OriginY,OriginY]
    dev_set_window (WindowHandle)
    dev_set_line_width (1)
    dev_set_color (ColorGraph)
    gen_region_polygon_filled (Histo, polyY, polyX)
    dev_display (Histo)
    * 
    * Display the coordinate system
    dev_set_line_width (1)
    dev_set_color (ColorAxis)
    gen_arrow_contour_xld (ArrowX, OriginY, OriginX, OriginY, OriginX + PlotAreaX, 5, 5)
    gen_arrow_contour_xld (ArrowY, OriginY, OriginX, OriginY - PlotAreaY, OriginX, 5, 5)
    dev_display (ArrowX)
    dev_display (ArrowY)
    * 
    dev_set_color (ColorAxis)
    get_string_extents (WindowHandle, LabelX, Ascent, Descent, W, H)
    set_tposition (WindowHandle, OriginY + 10, OriginX + PlotAreaX / 2 - W / 2)
    write_string (WindowHandle, LabelX)
    * 
    if (int(ValueXMin) == ValueXMin)
        MinXD := int(ValueXMin)
    else
        MinXD := ValueXMin
    endif
    get_string_extents (WindowHandle, MinXD$'3.1f', Ascent1, Descent1, W, H)
    set_tposition (WindowHandle, OriginY + 10, OriginX)
    write_string (WindowHandle, MinXD$'3.1f')
    if (int(ValueXMax) == ValueXMax)
        MaxXD := int(ValueXMax)
    else
        MaxXD := ValueXMax
    endif
    get_string_extents (WindowHandle, MaxXD$'3.1f', Ascent2, Descent2, W, H)
    set_tposition (WindowHandle, OriginY + 10, OriginX + PlotAreaX - W)
    write_string (WindowHandle, MaxXD$'3.1f')
    get_string_extents (WindowHandle, MinY, Ascent3, Descent3, W, H)
    set_tposition (WindowHandle, OriginY - H, OriginX - 10 - W)
    write_string (WindowHandle, MinY)
    get_string_extents (WindowHandle, MaxY, Ascent4, Descent4, W, H)
    set_tposition (WindowHandle, OriginY - PlotAreaY, OriginX - 10 - W)
    write_string (WindowHandle, MaxY)
    * 
    return ()

     注意:需要将调用文件和自定义函数文件放在一个路径就可以调用。

    展开全文
  • 图像处理 直方图 遥感
  • 图像灰度线性变换及直方图均衡化源代码图像灰度线性变换及直方图均衡化源代码图像灰度线性变换及直方图均衡化源代码图像灰度线性变换及直方图均衡化源代码图像灰度线性变换及直方图均衡化源代码图像灰度线性变换及...
  • OpenCV绘制灰度图像直方图

    千次阅读 2019-08-29 22:43:57
    ///输入的数组 数组个数 需要统计的通道索引 可选的操作掩码 输出的目标直方图(二位数组) 直方图维度 直方图尺寸数组 每一维数组的取值范围 calcHist(&src, 1, &channels, Mat(), dstHist, dims, &...
  • 在这里,您需要将输入作为“直方图 ' imagename.ext '
  • opencv获取灰度图像直方图

    千次阅读 2017-08-04 12:00:05
    1.灰度图像直方图 原理以及实现方式:在灰度图像中每个像素都以一个0~255的数值与之对应(0(黑);255(白)),这里我们将灰度图像看做一个大矩阵,像素值也就矩阵中每个元素值。直方图是一个简单的表格,表示一个...
  • #参数0表示以灰度图像读入该图片,也就是说在读取的同时就进行了处理 img = cv.imread('../dataset3/girl.bmp', 0) #img.ravel()指最终的直方图将对数据集进行统计,256是统计的区间分布,[0,256]是显示的区间 plt....
  • 主要实现了彩色图像到灰度图像的转化,然后根据灰度图像进行直方图均衡化,用MATLAB 编写的,简单易懂。
  • 灰度图像直方图均衡化变换函数算法.doc
  • 该资源主要参考我的博客【数字图像处理】四.MFC对话框绘制灰度直方图,博客地址http://blog.csdn.net/eastmount/article/details/46237463 讲述VC++ 6.0关于数字图像处理的灰度直方图(中值灰度、平均灰度)、灰度、...
  • 这里我们不使用命令 imhist() 来找出任何灰度图像直方图,这是一个内置的命令,而不是使用内置命令。 读者可以通过与使用内置命令生成的图进行比较来验证图。
  • 实现一维灰度直方图图像分割的matlab实现源代码。亲自试验过,可以运行,可以用来自动确定阈值或者图像分割。
  • clc; clear all; img=im2double(imread('D:\Gray Files\3-27.tif')); BlockSize=3; %求原始图像的均值和标准差 img_mean=mean2(img);...img_std=std2(img);...%对原始图像进行扩展,此处采用了镜像扩展,目的是解决...
  • 直方图规定化可以变换直方图使之变为某个需要的形状,从而有选择地增强某个灰度值范围内的对比度或使图像灰度值的分布满足特定的要求。
  • 灰度图像直方图统计

    2013-04-11 20:09:07
    数字图像处理实习报告,关于灰度图像直方图统计。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,277
精华内容 12,110
关键字:

灰度图像直方图