[计算机视觉]2015.9.30Histogram Equalization with opencv

*********1.Histogram equalization************

(1)直方图均衡化的目的:经过转换i->c(i)使成绩为75分(a%)的学生成绩优于3/4(a%)的学生;

根据定义可得到的式子,对于全灰度区间的均衡化来说

c(i)/I=sum{n=0:i}(h(n))/N;

其中I为像素灰度值的最大值,N为图像中像素的总数,

右边sum{n=0:i}(h(n))称为累计分布函数,表示像素灰度值小于i的所有的像素点的个数;

n为像素值,取值为0~n;

当我们对某一特定的灰度区间进行均质化时,应有

c(i)/(Imax-Imin)=sum{n=Imin:i}(h(n))/N;

其中N为该区间内的象素点总数;

(2)在opencv中可以用对hsv图像的v亮度矩阵进行均衡化:

HSV颜色空间模型HSV颜色空间模型

H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系

a.转化为HSV体系的图像cvtColor

b.split出Volume分量矩阵

c.对volume进行均衡化equalizeHist()

d.merge函数将三个单通道合并为一个三通道图像

#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv; 
int main()
{
	Mat img = imread("lena.jpg");//load the  image
	Mat img_hsv;
	Mat img_H;
	cvtColor(img, img_hsv, CV_BGR2HSV);//convert the image from RGB to HSV 
	imshow("img_hsv", img_hsv);
	Mat img_hsv_v[3];
	split(img_hsv,img_hsv_v);//split the image to a single-channel image to get the mat of V(volume)
	imshow("img_hsv_v", img_hsv_v[2]);
	equalizeHist(img_hsv_v[2], img_hsv_v[2]);
	imshow("img_hsv_v_1", img_hsv_v[2]);
	merge(img_hsv_v, 3,img_hsv);//merge the 3 single-channel images into a 3-channels image 
	imshow("img_hsv_1", img_hsv);
	waitKey();
}





 

#include "stdafx.h"
#include 
   
   
    
    
#include 
    
    
     
     
using namespace cv; 
int main()
{
	Mat img = imread("lena.jpg");
	Mat img_hsv;
	Mat img_H;
	cvtColor(img, img_hsv, CV_BGR2HSV); 
	imshow("img_hsv", img_hsv);

	Mat img_hsv_v[3];
	split(img_hsv,img_hsv_v);
	imshow("img_hsv_v", img_hsv_v[2]);
	equalizeHist(img_hsv_v[2], img_hsv_v[2]);
	imshow("img_hsv_v_1", img_hsv_v[2]);
	merge(img_hsv_v, 3,img_hsv);
	imshow("img_hsv_1", img_hsv);
	waitKey();
}
    
    
   
   

****************opencv**************************

改版后的opencv更加像matlab
1.Mat img=imread(Name_Path);
Mat img_new;Mat支持可变大小矩阵的声明而不需要对矩阵 进行赋值;
区别于Mat img_new=img;Mat img_new(img);
这两种方法得到的img_new是img的引用,对新矩阵的操作会改变img的值
2.imshow("title",Mat);
3.之前的带有cv开头的函数基本都去掉了cv,cv开头的表示是原有函数,是基于c的,在c++中运行会抱错
例如:cvtColor();split();merge();





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值