[计算机视觉]2015.9.30Histogram Equalization with opencv
2015-09-30 21:50
169 查看
*********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亮度矩阵进行均衡化:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201711/f40c350acf20c03b876469ac7b1b2de3.jpg)
H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系a.转化为HSV体系的图像cvtColorb.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 imageMat img_hsv;Mat img_H;cvtColor(img, img_hsv, CV_BGR2HSV);//convert the image from RGB to HSVimshow("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 imageimshow("img_hsv_1", img_hsv);waitKey();}
#include "stdafx.h"#include#includeusing 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更加像matlab1.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();相关文章推荐
- python中使用OpenCV进行人脸检测的例子
- opencv 做人脸识别 opencv 人脸匹配分析
- 使用opencv拉伸图像扩大分辨率示例
- OpenCV 2.4.3 C++ 平滑处理分析
- 利用Python和OpenCV库将URL转换为OpenCV格式的方法
- python结合opencv实现人脸检测与跟踪
- 在树莓派2或树莓派B+上安装Python和OpenCV的教程
- OpenCV配置,从来没有这么简单!
- ubuntu下opencv和qt的安装配置
- OpenCV学习笔记(二十五)——OpenCV图形界面设计Qt+VS2008
- 分享一些OpenCV实现立体视觉的经验
- 关于OpenCv图像变换与基本图形检测
- "应用程序正常初始化失败"-0xc0150002 解决办法
- OpenCV->HSV色彩空间
- opencv 内存泄露
- OpenCV函数cvFindContours
- OpenCV 2.3.1图像文件的读入和显示
- opencv2 矩阵方式 resize图像缩放代码
- OpenCV 灰度直方图
- 彩色图转为灰度图