直方图均衡化

  直方图均衡化作用:提高图像对比度,拉伸灰度值范围。

代码示例

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>using namespace cv;
using namespace std;int main(int, char** argv)
{Mat src, dst;char* source_window = "Source Image";char* equal_window = "Equalization Image";src = imread("../data/source.jpg");if (src.empty()) { return -1; };cvtColor(src, src, COLOR_BGR2GRAY);     // 灰度图像equalizeHist(src, dst);                 // 直方图均衡化imshow(source_window, src);imshow(equal_window, dst);waitKey(0);return 0;
}

运行结果


直方图计算

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
)   说明:src:原图像    nimages:原图像数量          channels:通道mask:掩模     hist:输出直方图             dims:直方图维度histSize:直方图每一维的个数                ranges:直方图每一维的范围uniform:true则直方图范围尺寸均匀分布        accumulate:false则调用该函数前直方图先清零

代码示例

#include "opencv2/highgui.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>using namespace std;
using namespace cv;int main( )
{Mat src, dst;src = imread("../data/lena.jpg");if (src.empty()) { return -1; }vector<Mat> bgr_planes;                 // 矩阵向量split(src, bgr_planes);                 // 将多通道图像分为多个单通道图像int histSize = 256;float range[] = { 0,256 };const float* histRange = { range };     // 必须加const,否则报错bool uniform = true;                    // 直方图是否分布均匀bool accumulate = false;                // 如果为true,在开始分配时直方图不会被清除Mat b_hist, g_hist, r_hist;calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate);calcHist(&bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate);calcHist(&bgr_planes[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_8UC3, Scalar(0, 0, 0));normalize(b_hist, b_hist, 9, 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), 2, 8, 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), 2, 8, 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), 2, 8, 0);}imshow("calcHist Demo", histImage);waitKey(0);return 0;
}

运行结果


直方图比较

double cv::compareHist  (   InputArray  H1,InputArray  H2,int         method
)   说明:method:相关Correlation  ( CV_COMP_CORREL )卡方Correlation  ( CV_COMP_CORREL )交集Intersection ( CV_COMP_INTERSECT )巴特查里亚距离Bhattacharyya distance ( CV_COMP_BHATTACHARYYA )

  引入了函数cv::compareHist( ),代码与上面类似,在此不赘述,具体查看链接:

  https://docs.opencv.org/master/d8/dc8/tutorial_histogram_comparison.html


【OpenCV】直方图相关推荐

  1. OpenCV直方图比较Histogram Comparison

    OpenCV直方图比较Histogram Comparison 直方图比较Histogram Comparison 目标 理论 代码 这个程序做什么? 解释 结果 直方图比较Histogram Com ...

  2. OpenCV学习-P29-P32 Opencv直方图均衡化、掩膜

    OpenCV学习-P29-P32 Opencv直方图均衡化及掩膜 1 直方图 2 直方图均衡化 3 直方图自适应均衡化 1 直方图 直方图原理:统计图像各个灰度区间的像素数 cv2.calcHist( ...

  3. OpenCV基础(16)OpenCV直方图均衡化和自适应直方图均衡化(CLAHE)

    在本教程中,您将学习使用OpenCV实现直方图均衡化和自适应直方图均衡化(CLAHE). 直方图均衡化是一种基本的图像处理技术,通过更新图像直方图的像素强度分布来调整图像的全局对比度.这样做可以使低对 ...

  4. Python,OpenCV直方图均衡化以提高图像对比度

    Python,OpenCV直方图均衡化以提高图像对比度 1. 效果图 2. 原理 2.1 直方图均衡化应用 2.2 直方图均衡化分类 3. 源代码 参考 这篇博客将介绍直方图均衡化(全局 & ...

  5. OpenCV 直方图的计算和绘制

    图像直方图 是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素个数.这种直方图中,横坐标的左侧为较暗的区域,而右侧为较亮的区域.因此一张较暗图片的直方图中的数据多集中于左侧和中间部分, ...

  6. OpenCV直方图计算Histogram Calculation

    OpenCV直方图均衡Histogram Equalization 直方图均衡Histogram Equalization 目标 什么是直方图? OpenCV为您提供什么 代码 解释 结果 直方图均衡 ...

  7. opencv 直方图_OpenCV之图像直方图反向投影

    python代码: import cv2 as cv import numpy as np from matplotlib import pyplot as pltdef back_projectio ...

  8. [Python图像处理] 三十七.OpenCV直方图统计两万字详解(掩膜直方图、灰度直方图对比、黑夜白天预测)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. python opencv直方图_【python opencv】直方图均衡

    搜索热词 考虑这样一个图像,它的像素值仅局限于某个特定的值范围.例如,较亮的图像将把所有像素限制在高值上.但是一幅好的图像会有来自图像所有区域的像素.因此,您需要将这个直方图拉伸到两端(如下图所示,来 ...

  10. opencv 直方图反向投影

    转载至:http://www.cnblogs.com/zsb517/archive/2012/06/20/2556508.html 直方图反向投影式通过给定的直方图信息,在图像找到相应的像素分布区域, ...

最新文章

  1. (转)一台服务器安装两个tomcat6 服务的解决方案
  2. 黑客侵入电子签名供应商DocuSign的数据库 随后向用户发起钓鱼攻击
  3. 人工智能系统Google开源的TensorFlow官方文档中文版
  4. 艾蔻智能机器人怎么连接网络_智能建筑背后的关键技术:无处不在的网络连接...
  5. 博世如何通过创新加速成功孵化出人工智能养虾初创公司?
  6. SpringBoot 快速入门
  7. 移动硬盘驱动怎么修复_为什么您的新硬盘驱动器未在Windows中显示(以及如何修复)...
  8. 5.视频监控 - 摄像头接口
  9. 使用grep命令抓取报: memory exhausted(内存耗尽)
  10. 2022-2028年全球与中国个人冷却装置行业竞争格局与投资战略研究
  11. 用SurfaceView绘制正弦曲线
  12. 小程序实战—答题类小程序
  13. 解决闭包问题时 setTimeout执行顺序提前的问题
  14. 脸萌火爆背后的产品思考
  15. python简单入门——画多啦A梦
  16. SAP B1 成品BOM表展开
  17. Jmeter压力测试报告案例
  18. 红米K30s和华为Mate30Epro哪个好
  19. 深度学习入门——Mini-batch、Momentum与Adam算法
  20. 怎样理解WaaS?看zCloud如何走上自治智能数据库云管平台的道路

热门文章

  1. 我的世界服务器开启就停止运行,我的世界怎么停止时间
  2. mysql关联表分页查询_MySQL一对多分页查询-主表关联表条件查询问题
  3. python 多继承与super使用详解_Python super()方法、多继承以及MRO顺序
  4. LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation 论文笔记
  5. Python之 dict(字典)(回)
  6. PyTorch nn.GRU 使用详解
  7. 【米课】思维导图与深度思考
  8. 敏捷开发中asp.net MVC的开发次序感受(先开发View?先开发Model?先开发Controller!)...
  9. 深度剖析Java数据结构之队列(一)——双端队列(ArrayDeque)
  10. PlayMaker 不支持过渡条件