opencv直方图均衡化
#include <iostream>
#include "highgui.h"
#include "cv.h"
#include "cxcore.h"
#include "math.h"
using namespace std;
using namespace cv;
//绘制1维直方图
Mat draw1DHistogram(Mat histogramMat) {
double maxVal = 0, minVal = 0;
minMaxLoc(histogramMat, &minVal, &maxVal, 0, 0);
Mat histImage(histogramMat.rows, histogramMat.rows, CV_8U, Scalar(255));
int hpt = static_cast<int>(0.9 * histogramMat.rows);
for (int h = 0; h < histogramMat.rows; h++) {
float binVal = histogramMat.at<float>(h);
int intensity = static_cast<int>((binVal / maxVal) * hpt);
line(histImage, Point(h, histogramMat.rows - 1),
Point(h, histogramMat.rows - 1 - intensity), Scalar::all(0));
}
return histImage;
}
//一维直方图计算(采用实际图像) 实验2
void get1DHistogramExperiment2(Mat& image) {
//计算直方图 使用的图片数量
int nImageArrays = 1;
//使用的直方图数组
Mat* imageArrays = new Mat[nImageArrays];
//加载实际图像
// Mat image = imread("e:\\citywall1.bmp", 0);
if (image.data == NULL) {
printf("加载图像失败\n");
return;
}
imageArrays[0] = image;
//直方图的维数
const int dims = 1;
//在图像的通道序列中 本次直方图计算使用了哪些通道,本代码中使用了编号为0的通道
int channels[dims] = { 0 };
//直方图中每一维上的bin数,本代码是创建一维直方图 并且 分为256个bin
int histBins[dims] = { 256 };
//保存直方图的结果 CV_32F,dims说明矩阵的维度,histBins说明矩阵每一维上的大小
Mat histND(dims, histBins, CV_32F, Scalar::all(0));
//手动指定各个bin的取值范围
//float image1Range[5]={0.0,50.0,200.0,220.0,256.0};
//统一分割,只需要指定bin[0]的下限值和bin[histBins[dims-1]-1]的上限值即可
float image1Range[5] = { 0.0, 256.0 };
//各个通道的 bin划分规则
const float* allRanges[dims] = { image1Range };
//直方图计算
calcHist(imageArrays, nImageArrays, channels, Mat(), histND, dims, histBins,
allRanges, true);
//绘制直方图
Mat histImage = draw1DHistogram(histND);
//显示直方图
namedWindow("hist");
imshow("hist", histImage);
waitKey(0);
}
/**
* 直方图均衡
*/
void HistogramEqual(Mat& src){
Mat dst;
equalizeHist(src,dst); //直方图均衡化
get1DHistogramExperiment2(dst);
namedWindow("equal");
imshow("equal",dst);
waitKey(0);
}
int main() {
Mat image = imread("e:\\test.bmp", CV_LOAD_IMAGE_GRAYSCALE);
namedWindow("src");
imshow("src",image);
get1DHistogramExperiment2(image);
HistogramEqual(image);
return 0;
}
opencv直方图均衡化的更多相关文章
- OpenCV——直方图均衡化(用于图像增强)
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...
- opencv::直方图均衡化
直方图均衡化 图像直方图: 是指对整个图像像在灰度范围内的像素值是指对整个图像像在灰度范围内的像素值(~)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图. 直方图反映了图像灰度的分布情况. ...
- OpenCV-Python教程(10、直方图均衡化)
相比C++而言,Python适合做原型.本系列的文章介绍如何在Python中用OpenCV图形库,以及与C++调用相应OpenCV函数的不同之处.这篇文章介绍在Python中使用OpenCV和NumP ...
- opencv 彩色图像亮度、对比度调节 直方图均衡化
直接上代码: #include <Windows.h> #include <iostream>// for stand I/O #include <string> ...
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
http://blog.csdn.net/dcrmg/article/details/53677739 1. 基于直方图均衡化的图像增强 直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶 ...
- 直方图均衡化的 C++ 实现(基于 openCV)
这是数字图像处理课的大作业,完成于 2013/06/17,需要调用 openCV 库,完整源码和报告如下: #include <cv.h> #include <highgui.h&g ...
- opencv图像直方图均衡化及其原理
直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均 ...
- opencv 5 图像转换(3 重映射 仿射变换 直方图均衡化)
重映射 实现重映射(remap函数) 基础示例程序:基本重映射 //---------------------------------[头文件.命名空间包含部分]------------------- ...
- opencv —— equalizeHist 直方图均衡化实现对比度增强
直方图均匀化简介 从这张未经处理的灰度图可以看出,其灰度集中在非常小的一个范围内.这就导致了图片的强弱对比不强烈. 直方图均衡化的目的,就是把原始的直方图变换为在整个灰度范围(0~255)内均匀分布的 ...
随机推荐
- UVA 11354 Bond 邦德 (RMQ,最小瓶颈MST)
题意: n个城市,m条路,每条路有个危险值,要使得从s走到t的危险值最小.回答q个询问,每个询问有s和t,要求输出从s到t最小的危险值.(5万个点,10万条边) 思路: 其实要求的是任意点对之间的最小 ...
- HDU 1711 Number Sequence (数字KMP,变形)
题意: 在一个序列中找到一个连续的子序列,返回其开始位置. 思路: 每个数字当成1个字符,长的序列是原串,短的序列是模式串,求next数组后进行匹配. #include <iostream> ...
- (C#基础) byte[] 之初始化, 赋值,转换。
byte[] 之初始化赋值 用for loop 赋值当然是最基本的方法,不过在C#里面还有其他的便捷方法. 1. 创建一个长度为10的byte数组,并且其中每个byte的值为0. byte[] myB ...
- Node.js的循环依赖
我们知道在实际编程过程中,要尽可能的减少或者规避循环依赖情况的发生.但在现实环境中,有时却不得不产生循环依赖.Node.js不提倡使用循环依赖,但真有如此情况发生时Node.js也有办法解决.这篇博文 ...
- Android开发如何在4.0及以上系统中自定义TitleBar
本文将通过一个实例讲解怎么实现在4.0及以上系统版本中实现自定义TitleBar,这只是我自己找到的一种方法; xml布局文件 activity_main.xml <RelativeLayout ...
- winform 防止多開
場景: 當我們的電腦可以使用多用戶同時登錄時候,每個使用者只允許執行一次exe程式. 例如:一台公用電腦,有多個用戶A.B. 當用戶A進入系統第一次運行C:\XX.exe,OK.第二次運行XX.exe ...
- 基类,派生类,内存分配情况 .xml
pre{ line-height:1; color:#1e1e1e; background-color:#d2d2d2; font-size:16px;}.sysFunc{color:#627cf6; ...
- OpenGl从零开始之坐标变换(上)
坐标变换是深入理解三维世界的基础,非常重要.学习这部分首先要清楚几个概念:视点变换.模型变换.投影变换.视口变换. 在现实世界中,所有的物体都具有三维特征,但计算机本身只能处理数字,显示二维的图形,因 ...
- 11个实用经典的SQL小贴士
学习工作之余,在没有要解决问题的压力之下,还是建议系统的看看书,对于一些认为没啥用的知识点,也建议去仔细的看看,练练手,说不定什么时候就用到了,到时也好有针对性的去查,不至于盲目的按照自己的思路,重复 ...
- 软件工程个人项目-Word frequency program by11061167龚少波
(一)工程设计时间预计 1.代码编写:4小时 熟悉Visual studio 2012的使用 : 程序代码部分主要分为三个步骤: (1)主函数的构建,包括各种函数调用及输入输出部分: (2)对目标文件 ...