OpenCV学习之直方图均衡化
2017-08-04 13:47
169 查看
直方图均衡化
如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像原取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。
如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像原取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。
//直方图均衡化 #include "cv.h" #include "highgui.h" int main(int argc, char** argv) { int i; IplImage* src = cvLoadImage("Lena.tiff", 1); IplImage* imgChannel[4] = { 0, 0, 0, 0 }; IplImage* dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3); if (src) { for (i = 0; i < src->nChannels; i++) { imgChannel[i] = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); //要求单通道图像才能直方图均衡化 } //通道分离 cvSplit(src, imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3]);//BGRA for (i = 0; i < dst->nChannels; i++) { //直方图均衡化,原始图像和目标图像必须是单通道 cvEqualizeHist(imgChannel[i], imgChannel[i]); } //通道组合 cvMerge(imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3], dst); cvNamedWindow("src", 1); cvShowImage("src", src); cvNamedWindow("Equalize", 1); cvShowImage("Equalize", dst); cvWaitKey(0); //释放资源 for (i = 0; i < src->nChannels; i++) { if (imgChannel[i]) { cvReleaseImage(&imgChannel[i]); //imgChannel[i] = 0; } } cvReleaseImage(&dst); } return 0; }
相关文章推荐
- PHP GD 图像处理组件的常用函数总结
- PHP图像处理之imagecreate、imagedestroy函数介绍
- OPENCV批量读取图片实现方法
- Linux下利用Opencv打开笔记本摄像头问题
- C++函数pyrUp和pyrDown来实现图像金字塔功能
- Visual Studio 2017+OpenCV环境搭建教程
- jsvascript图像处理―(计算机视觉应用)图像金字塔
- Javascript图像处理思路及实现代码
- python中使用OpenCV进行人脸检测的例子
- opencv 做人脸识别 opencv 人脸匹配分析
- 使用opencv拉伸图像扩大分辨率示例
- Opencv学习教程之漫水填充算法实例详解
- OpenCV中C++函数imread读取图片的问题及解决方法
- PHP图像处理之使用imagecolorallocate()函数设置颜色例子
- java数字图像处理基础使用imageio写图像文件示例
- c++图像处理:24位真彩图颜色变换实例
- visual studio 2013中配置opencv图文教程 Opencv2.4.9安装配置教程
- 使用Java进行图像处理的一些基础操作
- javascript图像处理―边缘梯度计算函数
- Javascript图像处理―阈值函数实例应用