直方图均衡

#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
/*
有的版本号CV_BGR2GRAY宏定义没有,须要载入个legacy文件来获取,可是会与其它调用的宏定义出现冲突,所以
这里单独定义一个彩色图像到灰度图像的case number
*/
#define CV_BGR2GRAY 6
#include <iostream>
using namespace std;
using namespace cv; Mat HistogramEquivalent(Mat,int); int main(){
Mat img = imread("lenna.jpg");
imshow("HistogramEqiovalent",HistogramEquivalent(img,256));
waitKey(100000000);
} /**
方法:直方图均衡
作用:增强图像的对照度,使图像更加清楚,即图像增强的一种方法
參数:img表示源图像,scalar表示的是最大灰度级(为2时表示二值图像)
*/
Mat HistogramEquivalent(Mat img,int scalar){ //把图像变成灰度图像
if(img.channels()!=1)
cvtColor(img,img,CV_BGR2GRAY);
//创建个与源图像一样的空图像
Mat newImage=Mat(img.rows,img.cols,img.type());
//获取图像的行和列
int width = img.cols , height = img.rows;
int count[256]={0};
double prob[256] = {0};
int maxPixel = 0,minPixel =scalar-1; for(size_t i = 0;i<height;i++)
for(size_t j=0;j<width;j++){
int currPixel = img.at<uchar>(i,j);
count[currPixel]++; //统计每一个灰度级有多少个点
//统计该图像中最大和最小的像素值
if(currPixel>maxPixel)
maxPixel = currPixel;
else if(currPixel<minPixel)
minPixel = currPixel;
} //计算每一个灰度级出现的概率,为获取double型的数据,在后面乘个小数1.0进行隐式转换
for(size_t num = 0;num<scalar;num++)
prob[num] = count[num]*1.0/(height*width);
//计算累积数组
for(size_t i = 1;i<scalar;i++)
prob[i] += prob[i-1];
for(size_t i=0;i<height;i++)
for(size_t j=0;j<width;j++)
newImage.at<uchar>(i,j) = prob[img.at<uchar>(i,j)]*(maxPixel-minPixel)+minPixel;
return newImage;
}

OpenCV入门学习(三)HistogramEquivalent的更多相关文章

  1. OpenCV入门学习笔记

    OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...

  2. SCARA——OpenGL入门学习三

    OpenGL入门学习[三] 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用 ...

  3. SpringMVC入门学习三

    今天是Springmvc学习的第三天,今天我将主要介绍一下: 常用注解的使用 关于非post.get请求的处理 文件上传与下载 拦截器   常用注解的使用 老大在此 @Controller @Cont ...

  4. Egg入门学习(三)---理解中间件作用

    Egg是基于koa的,因此Egg的中间件和Koa的中间件是类似的.都是基于洋葱圈模型的. 在Egg中,比如我想禁用某些IP地址来访问我们的网页的时候,在egg.js中我们可以使用中间件来实现这个功能, ...

  5. OpenCV入门学习资料汇总

    OpenCV学习文档资料 OpenCV学习:1)OpenCV中文网站——http://wiki.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5 2)python实 ...

  6. MongoDB入门学习(三):MongoDB的增删查改

            对于我们这样的菜鸟来说,最重要的不是数据库的管理,也不是数据库的性能,更不是数据库的扩展,而是怎么用好这款数据库,也就是一个数据库提供的最核心的功能,增删查改.         由于M ...

  7. opencv入门教程三

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨)  ...

  8. Objective C 快速入门学习三

    1.数据类型 和C语言基本一样. 有一个特别数据类型id,可以储存任何类型的对象,它是实现多态和动态绑定的基础. Objective-C 2.程序结构 Objective-C和C的程序结构一模一样,具 ...

  9. Struts入门学习(三)---自定义类型转换器

    类型转换器是将浏览器传递的参数进行转换为了与服务器端的参数匹配,先举个例子如果我们想往服务器传递日期类型的参数时我们要怎么让浏览器传过去的让服务器明白 我们新建一个类 ConverterTest.ja ...

随机推荐

  1. OpenGL 之 坐标变换

    http://www.cnblogs.com/irvinow/archive/2009/11/20/1606496.html 创建OpenGL模型过程: OPENGL坐标变换很有特点,为了简单描述先定 ...

  2. Golang/Go语言/Go IDE/Go windows环境搭建/Go自动提示编译器/GoSublime

    Go是Google开发的一种编译型,并发型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go ...

  3. python登陆github

    #!/usr/bin/env python # encoding: utf-8 import requests from headers import headers from lxml import ...

  4. java基础练习 12

    public class Twelfth { /*海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五 ...

  5. studio构建错误Element uses-permission#android.permission.ACCESS_NETWORK_STATE at AndroidManifest.xml:38:5-79 dupli

    今天在项目构建的时候遇到了如下报错: Element uses-permission#android.permission.ACCESS_NETWORK_STATE at AndroidManifes ...

  6. pymongo: MongoClient opened before fork错误排解

    使用pymongo配合flask和gunicorn使用的时候触发以下错误信息: [2017-09-19 15:20: ] [25780] [CRITICAL] WORKER TIMEOUT (pid: ...

  7. sql多对多探讨

    --用sql语句探讨一对多 多对多关系 /**** 你有3个表  学生表(学生id 学生姓名) 课程表(课程id 课程名) 成绩表 (学生id 课程id 分数) 班级表(班级id 学生id) 这里的班 ...

  8. Selenium2+python自动化29-js处理多窗口【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/js/ 前言 在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解: ...

  9. .apache.commons.io 源代码学习(二)FilenameUtils类

    FilenameUtils是apache common io中一个独立的工具类,对其他没有依赖,看其源代码的import即可知道. import java.io.File;import java.io ...

  10. 我在16aspx网上下载了个C#源码,如何能在我自己的计算机上跑起来,很急!求详细操作过程!

    先搞清楚是WINDOWS程序还是WEB程序.