图像处理直方图的bin

2016-10-08 17:33:23 taoyanqi8932 阅读数 15039
  • 图像直方图统计

    掌握OpenCV核心模块,熟练使用相关API 理解各个API背后的相关算法原理,每个参数意义 有能力解决使用应用场景问题,大量工程代码经验分享 掌握图像处理与视频分析,图像分析与测量编码与开发技巧

    159人学习 贾志刚
    免费试看

直方图

灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像元的个数。确定图像像元的灰度值范围,以适当的灰度间隔为单位将其划分为若干等级,以横轴表示灰度级,以纵轴表示每一灰度级具有的像元数或该像元数占总像元数的比例值,做出的条形统计图即为灰度直方图。

如下图所示,做直方图的过程:

这里写图片描述

直方图的性质:

  1. 直方图反映了图像中的灰度分布规律。它描述每个灰度级具有的像元个数,但不包含这些像元在图像中的位置信息。
  2. 任何一幅特定的图像都有唯一的直方图与之对应,但不同的图像可以有相同的直方图。
  3. 如果一幅图像有两个不相连的区域组成,并且每个区域的直方图已知,则整幅图像的直方图是该两个区域的直方图之和

直方图的应用

  1. 对于每幅图像都可做出其灰度直方图。
  2. 根据直方图的形态可以大致推断图像质量的好坏。由于图像包含有大量的像元,其像元灰度值的分布应符合概率统计分布规律。假定像元的灰度值是随机分布的,那么其直方图应该是正态分布。
  3. 图像的灰度值是离散变量,因此直方图表示的是离散的概率分布。若以各灰度级的像元数占总像元数的比例值为纵坐标轴做出图像的直方图,将直方图中各条形的最高点连成一条外轮廓线,纵坐标的比例值即为某灰度级出现的概率密度,轮廓线可近似看成图像相应的连续函数的概率分布曲线

这里写图片描述

直方图均衡化

直方图均衡化是将原图像的直方图通过变换函数变为均匀的直方图,然后按均匀直方图修改原图像,从而获得一幅灰度分布均匀的新图像。

这里写图片描述

计算过程如下:

  1. 统计原图像每一灰度级的像元数和累积像元数。
  2. 按下图公式计算变换后的值
  3. 四舍五入得到新的灰度值
  4. 统计像元

下图所示:

这里写图片描述

下面用Matlab实现其过程:

clc;clear;close all;
I=imread('flower.jpg');      //注意图像是灰度图像
subplot(1,2,1);
imshow(I)
title('原始图像')
subplot(1,2,2)
imhist(I);
title('直方图')
J=histeq(I);
figure;
subplot(1,2,1)
imshow(J)
title('直方图均衡化')
subplot(1,2,2)
imhist(J)
title('直方图')

结果如下图所示:很明显,直方图区域均匀分布。

这里写图片描述

用OpenCV实现过程如下:

#include "opencv2/opencv.hpp"
#include "opencv2/opencv_modules.hpp"
#include "opencv2/highgui/highgui.hpp"
#include<iostream>
using namespace cv;
using namespace std;

/*
   计算直方图的函数
   返回的是直方图的矩阵形式
   输入是图像
*/
Mat histogramCal(const Mat& image) {
    int histSize = 255;                //直方图的最大像素值
    float range[] = { 0,256 };      
    const float* histRange = { range };
    vector<Mat> bgr;                   //存储图像的矩阵
    split(image, bgr);                 //将彩色图像分割成,b,g,r分别存储
    bool uniform = true, accumulate = false;
    Mat b_hist, g_hist, r_hist;
    //分别计算各个波段的直方图
    calcHist(&bgr[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate);
    calcHist(&bgr[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate);
    calcHist(&bgr[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate);

    //绘制直方图
    int hist_w = 512, hist_h = 400;
    int bin_w = cvRound((double)hist_w / histSize);

    Mat histImage(hist_h, hist_w, CV_8U, Scalar(0, 0, 0));
    //将结果归一化[0,histImage.rows]
    normalize(b_hist,b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
    normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
    normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());

    for (int i = 1; i < histSize; i++) {
        line(histImage, Point(bin_w*(i - 1), hist_h - cvRound(b_hist.at<float>(i - 1))),
            Point(bin_w*(i), hist_h - cvRound(b_hist.at<float>(i))), Scalar(255, 0, 0));
        line(histImage, Point(bin_w*(i - 1), hist_h - cvRound(g_hist.at<float>(i - 1))),
            Point(bin_w*(i), hist_h - cvRound(g_hist.at<float>(i))), Scalar(0, 255, 0));
        line(histImage, Point(bin_w*(i - 1), hist_h - cvRound(r_hist.at<float>(i - 1))),
            Point(bin_w*(i), hist_h - cvRound(r_hist.at<float>(i))), Scalar(0, 0, 255));
    }
    return histImage;
}

int  main() {
    Mat src;
    src = imread("flower.png");
    src.convertTo(src, CV_8U);   //改变图像的深度
    cout << src.channels() << endl;
    namedWindow("origin", WINDOW_AUTOSIZE);
    imshow("origin", src);
    //imwrite("cute.jpg", src);

    Mat histImage = histogramCal(src);
    namedWindow("hist", WINDOW_AUTOSIZE);
    imshow("hist", histImage);

    Mat hist;
    vector<Mat>bgr;
    split(src, bgr);
    equalizeHist(bgr[0], bgr[0]);
    equalizeHist(bgr[1], bgr[1]);
    equalizeHist(bgr[2], bgr[2]);
    //合并
    Mat dst;
    merge(bgr, dst);
    namedWindow("equalize", WINDOW_AUTOSIZE);
    imshow("equalize",dst);

    Mat equalHist = histogramCal(dst);
    namedWindow("equalhist", WINDOW_AUTOSIZE);
    imshow("equalhist", equalHist);

    waitKey();
}

结果如下图所示:
这里用的是彩色的图像,可以看到,均衡话后凸显出了彩色部分。

这里写图片描述
这里写图片描述

2016-01-29 12:47:11 sunmc1204953974 阅读数 32029
  • 图像直方图统计

    掌握OpenCV核心模块,熟练使用相关API 理解各个API背后的相关算法原理,每个参数意义 有能力解决使用应用场景问题,大量工程代码经验分享 掌握图像处理与视频分析,图像分析与测量编码与开发技巧

    159人学习 贾志刚
    免费试看

图像直方图与直方图均衡化

图像直方图以及灰度与彩色图像的直方图均衡化

图像直方图:

概述:

图像的直方图用来表征该图像像素值的分布情况。用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。

图像直方图图形化显示不同的像素值在不同的强度值上的出现频率,对于灰度图像来说强度范围为[0~255]之间,对于RGB的彩色图像可以独立显示三种颜色的图像直方图。

同时直方图是用来寻找灰度图像二值化阈值常用而且是有效的手段之一,如果一幅灰度图像的直方图显示为两个波峰,则二值化阈值应该是这两个波峰之间的某个灰度值。

并且直方图是调整图像对比度的重要依据,直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。

下面我将介绍如何用python绘制图像直方图,以及直方图均衡化的原理并给出灰度图与彩色图的直方图均衡化。

使用python绘制图像直方图:

在之前写的《python基本图像操作》中已经提到了如何用python去绘制图像的直方图,python的优点就是具有众多扩展库和更加易用,所以可以避免陷入算法细节从更宏观的角度实现自己的想法,所以用python绘制直方图非常简单:

使用Matplotlib绘制直方图

(灰度)图像的直方图可以使用 hist() 函数绘制:

hist() 函数的第二个参数指定小区间的数目。需要注意的是,因为 hist() 只接受一维数组作为输入,所以我们在绘制图像直方图之前,必须先对图像进行压平处理。flatten() 方法将任意数组按照行优先准则转换成一维数组。

# -*- coding: utf-8 -*-

from PIL import Image

from pylab import *

# 读取图像到数组中,并灰度化
im = array(Image.open('./source/test.jpg').convert('L'))

# 直方图图像
hist(im.flatten(),128)

# 显示
show()

测试图片

Test.jpg

这里写图片描述

运行结果

这里写图片描述

直方图的原理也很简单了,自己实现也非常简单,所以也没有必要再过多叙述,具体细节可以去看一下C++的实现。

直方图均衡化(Histogram Equalization):

概述:

直方图均衡化是非常有用的一种变换,直方图均衡化是指将一幅图像的灰度直方图变平,使变换后的图像中每个灰度值的分布概率都相同。在对图
像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好的方法,并且可以增强图像的对比度。

如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像原取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。

图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。

直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。
这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对比度并且降低有用信号的对比度;变换后图像的灰度级减少,某些细节消失;某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。

实现:

直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。

直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):

  • (1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。

  • (2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。

累积分布函数(cumulative distribution function,CDF)即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。此时的直方图均衡化映射函数为:

累计分布函数(CDF)就是是概率密度函数(probability density function/pdf)的积分,相信学过概率论的同学对他一定不陌生:

累积分布函数(cumulative distribution function)定义 对连续函数,所有小于等于a的值,其出现概率的和。F(a)=P(x<=a)

所以总结一下灰度图直方图均衡化算法的步骤就是:

  • (1) 根据输入的灰度图像计算其原始直方图
  • (2) 对输入的原始直方图进行累加,计算其cdf
  • (3) 使用累计分布函数的插值计算新的灰度值(这里我使用比较常用的线性插值)

使用python及其数学库的话求直方图和cdf的方法已经为我们封装好了,所以实现起来代码量是很少的:

# -*- coding: utf-8 -*-

from PIL import Image

from pylab import *

#读取图像到数组中,并灰度化
im = array(Image.open('./source/test.jpg').convert('L'))

#绘制原始直方图
subplot(231)

hist(im.flatten(),256)

#计算图像直方图(每个bins数组的区间值对应一个imhist数组中的强度值)
imhist,bins = histogram(im.flatten(),256,normed=True)

#计算累积分布函数
cdf = imhist.cumsum()

#累计函数归一化(由0~1变换至0~255)
cdf = cdf*255/cdf[-1]

#绘制累计分布函数
subplot(232)

plot(bins[:256],cdf)

#依次对每一个灰度图像素值(强度值)使用cdf进行线性插值,计算其新的强度值
#interp(x,xp,yp) 输入原函数的一系列点(xp,yp),使用线性插值方法模拟函数并计算f(x)
im2 = interp(im.flatten(),bins[:256],cdf)

#将压平的图像数组重新变成二维数组
im2 = im2.reshape(im.shape)

# 显示均衡化之后的直方图图像
subplot(233)

hist(im2.flatten(),256)

#显示原始图像
gray()

subplot(234)

imshow(im)

#显示变换后图像
subplot(236)

imshow(im2)

show()

运行结果

这里写图片描述

其中线性插值公式是最常用、最简单的插值公式。线性插值和双线性插值是图形学中常用的技术,旋转变换后图片会有一些不连续点,就是通过双线性插值法解决的,之后我会单独写一篇博客进行详细介绍,这里简单介绍一下线性插值的原理:

处理分离的数据,如果想知道分离点之间的某些值,需要用到某种类型的插值。

这里写图片描述

使用线性插值,通过连接两点的线段找到X=2.7对应的Y值

0.7* (maxY-min Y)+minY=0.7*(20-10)+10=0.7*10+10=17

(14-minX)/(maxX-minX) =(14-13)/(16-13)=0.33

0.33* (maxY-minY)+minY=0.33*(46-35)+35=0.33*11+35=3.67+35=38.67

顺便说一下,基本所有的线性插值返回的都是浮点数。

所以我们使用插值技术利用离散的cdf得出新的灰度强度值。

彩色图像的直方图均衡化(Histogram Equalization):

一幅彩色图像由RGB三色通道构成,每个通道都是描述了该种颜色的强度(0-255)的一幅灰度图,所以比较简单的应用于彩色图像的均衡化就是把每个颜色通道均衡化之后进行合成,下面是我的具体实现:

# -*- coding: utf-8 -*-

from PIL import Image

from pylab import *

import copy

# 读取图像到数组中
im = array(Image.open('./source/test.jpg'))

#获取通道
r = im[:,:,0]

g = im[:,:,1]

b = im[:,:,2]

#显示各个通道原始直方图,均值化之后的直方图以及累计分布函数
figure()

#计算各通道直方图
imhist_r,bins_r = histogram(r,256,normed=True)
imhist_g,bins_g = histogram(g,256,normed=True)
imhist_b,bins_b = histogram(b,256,normed=True)

subplot(331)

hist(r.flatten(),256)

subplot(332)

hist(g.flatten(),256)

subplot(333)

hist(b.flatten(),256)


#各通道累积分布函数
cdf_r = imhist_r.cumsum()
cdf_g = imhist_g.cumsum()
cdf_b = imhist_b.cumsum()

#累计函数归一化(由0~1变换至0~255)
cdf_r = cdf_r*255/cdf_r[-1]
cdf_g = cdf_g*255/cdf_g[-1]
cdf_b = cdf_b*255/cdf_b[-1]

#绘制累计分布函数

subplot(334)

plot(bins_r[:256],cdf_r)

subplot(335)

plot(bins_g[:256],cdf_g)

subplot(336)

plot(bins_b[:256],cdf_b)

#绘制直方图均衡化之后的直方图

im_r = interp(r.flatten(),bins_r[:256],cdf_r)

im_g = interp(g.flatten(),bins_g[:256],cdf_g)

im_b = interp(b.flatten(),bins_b[:256],cdf_b)


# 显示直方图图像
subplot(337)

hist(im_r,256)

subplot(338)

hist(im_g,256)

subplot(339)

hist(im_b,256)

#显示原始通道图与均衡化之后的通道图
figure()

gray()

#原始通道图
im_r_s = r.reshape([im.shape[0],im.shape[1]])

im_g_s = g.reshape([im.shape[0],im.shape[1]])

im_b_s = b.reshape([im.shape[0],im.shape[1]])



#均衡化之后的通道图
im_r = im_r.reshape([im.shape[0],im.shape[1]])

im_g = im_g.reshape([im.shape[0],im.shape[1]])

im_b = im_b.reshape([im.shape[0],im.shape[1]])

subplot(231)

imshow(im_r_s)

subplot(232)

imshow(im_g_s)

subplot(233)

imshow(im_b_s)


subplot(234)

imshow(im_r)

subplot(235)

imshow(im_g)

subplot(236)

imshow(im_b)

#显示原始图像与均衡化之后的图像
figure()

#均衡化之后的图像
im_p = copy.deepcopy(im)

im_p[:,:,0] = im_r

im_p[:,:,1] = im_g

im_p[:,:,2] = im_b

subplot(121)

imshow(im)

subplot(122)

imshow(im_p)

show()

运行结果

figure1:RGB通道的原始直方图,cdf,均衡化后的直方图
这里写图片描述

figure2:RGB通道的原始图像,均衡化后的图像
这里写图片描述

figure3:原始图像,均衡化后的图像
这里写图片描述

结语:

本篇博客介绍了图像直方图和图像直方图均衡化的原理和方法,希望我的博客对大家有所帮助~

2017-08-24 19:52:56 llh_1178 阅读数 2523
  • 图像直方图统计

    掌握OpenCV核心模块,熟练使用相关API 理解各个API背后的相关算法原理,每个参数意义 有能力解决使用应用场景问题,大量工程代码经验分享 掌握图像处理与视频分析,图像分析与测量编码与开发技巧

    159人学习 贾志刚
    免费试看

在图像处理中时常会用到图像像素的直方图,但是,一般情况下我们只会使用直方图做为二值化图像的根据,很少会想到处理图像的直方图也可以使图像对比度增加,达到显著的效果。这就是直方图的均值化。

首先,我们从图像的直方图说起。什么是直方图?图像直方图,是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图。直方图反映了图像灰度的分布情况。是图像的统计学特征。

然后,我们再说直方图的均值化。图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像原取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。

最后,用代码的方式演示处理过程:

C++:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;
int main(int argc, char* argv) {
	Mat src, dst;
	src = imread("demo.jpg");
	if (src.empty()) {
		printf("could not load image...");
		return -1;
	}

	cvtColor(src, src, CV_BGR2GRAY);
	equalizeHist(src, dst);
	char input_title[] = "input image";
	char output_title[] = "output image";
	namedWindow(input_title, CV_WINDOW_AUTOSIZE);
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);

	imshow(input_title, src);
	imshow(output_title, dst);

	waitKey(0);
	return 0;
}
python:

#! /usr/bin/env python
# -*- coding:utf-8 -*-
import cv2
import matplotlib.pyplot as plt
src = cv2.imread("demo.jpg")
src = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
dst = cv2.equalizeHist(src)
fig = plt.figure(figsize=(15, 10))
ax1 = fig.add_subplot(221)
plt.imshow(src, "gray")
plt.xticks([]), plt.yticks([]), plt.title("original")
ax2 = fig.add_subplot(222)
ax2.hist(src.ravel(), 32, [0, 255], color="r")
plt.xticks([0, 255]), plt.title("original_histogram")
ax3 = fig.add_subplot(223)
plt.imshow(dst, "gray")
plt.xticks([]), plt.yticks([]), plt.title("equalize_result")
ax4 = fig.add_subplot(224)
ax4.hist(dst.ravel(), 32, [0, 255], color="g")
plt.xticks([0, 255]), plt.title("equalize_histogram")
plt.show()

结果图:

可以清楚的看出均值化后的图像比原图像清楚很多,跟其他增强对比度的操作例如掩膜操作,滤波操作等都是差不多的。以后又有一种新的方式可以增强图像的对比度了。

注:

equalizeHist()函数中输入的图像必须是8-bit的单通道图像。



2019-07-08 15:38:02 Osean_li 阅读数 215
  • 图像直方图统计

    掌握OpenCV核心模块,熟练使用相关API 理解各个API背后的相关算法原理,每个参数意义 有能力解决使用应用场景问题,大量工程代码经验分享 掌握图像处理与视频分析,图像分析与测量编码与开发技巧

    159人学习 贾志刚
    免费试看

引言

直方图广泛运用于很多计算机视觉运用当中。
参考整理的很好

什么是图像直方图?

通过标记帧与帧之间显著的边缘和颜色的统计变化,来检测视频中场景的变化。在每个兴趣点设置一个有相近特征的直方图所构成 “标签”,用以确定图像中的兴趣点。边缘,色彩,角度等直方图构成了可以被传递给目标识别分类器的一个通用特征类型

直方图就是数据进行统计的一种方法

  • 且具有图像平移、旋转、缩放不变性等众多优点。直方图在进行图像计算处理时代价较小,所以经常用于图像处理!
  • 直方图是一种对数据分布情况的图形表示,是一种二位统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量
  • 直方图是图像中像素强度分布的图形表达式
  • 它统计了每一个强度值所具有的像素个数

如何读懂直方图?

直方图的显示方式是左暗又亮,左边用于描述图像的暗度,右边用于描述图像的亮度
在这里插入图片描述

2019-10-24 14:21:53 Python_Matlab 阅读数 76
  • 图像直方图统计

    掌握OpenCV核心模块,熟练使用相关API 理解各个API背后的相关算法原理,每个参数意义 有能力解决使用应用场景问题,大量工程代码经验分享 掌握图像处理与视频分析,图像分析与测量编码与开发技巧

    159人学习 贾志刚
    免费试看

Bin的大小=图像中不同像素值得个数/Bin的数目
对于14位的图像,创建256个bin直方图
bin size = (2^14)/256 = 64
h(0) ← 0 ≤ I(u,v) < 64
h(1) ← 64 ≤ I(u,v) < 128

h(j) ← aj ≤ I(u,v) < aj+1

h(255) ← 16320 ≤ I(u,v) < 16384

from cv2 import cv2 as cv
import numpy as np 
import matplotlib.pyplot as plt
# from matplotlib import pyplot as plt

def plot_demo(image):
    plt.hist(image.ravel(),256,[0,256])
    # image.ravel() 将图像转成一维数组
    plt.show()   

def image_hist(image):
    color = ('blue','green','red')
    for i,color in enumerate(color):
        '''
        对一个列表or数组即要遍历索引又要遍历元素时,
        使用内置的enumerate函数,它会将列表or数组组成一个索引序列
        '''
        hist = cv.calcHist([image],[i],None,[256],[0,256])
        '''
        cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
        images:输入图像,写程序时必须加括号即[images]
        channels:处理的通道,也必须加括号即[channel]
        mask:直方图的模板区域,默认None即计算整幅图像的直方图。
        histSize:直方图格子间隔的宽度大小。
        ranges:直方图横轴范围。
        '''
        plt.plot(hist,color=color)
        plt.xlim([0,256])
    plt.show()

# 可以根据直方图得到该图形的主要特征,以后使用分割也有用

if __name__ == "__main__":
    filepath = "C:\\pictures\\6.jpg"
    img = cv.imread(filepath)       # blue green red
    cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
    cv.imshow("input image",img)

    plot_demo(img)
    image_hist(img)

    cv.waitKey(0)
    cv.destroyAllWindows()

话不多说,贴图
在这里插入图片描述
在这里插入图片描述

直方图中bin的说明

阅读数 5851

直方图与bin

阅读数 713