上一篇《OpenCV第十篇灰度直方图均衡化》介绍了灰度图像的直方图均衡化,实际生活中,肯定还是彩色图像用的最多,因此本篇介绍对彩色图像进行直方图均衡化。这样可以让大家直方图均衡化对图像增强的效果有个直观的印象。

在OpenCV中,彩色的图像其实是用一个多通道数组来存储的,每个单通道数组中的元素的取值范围都是0到255。这与灰度图中像素的变化范围是相同的。因此对彩色图像进行直方图均衡化只要先将彩色图像分解成若干通道,然后这些通道分别进行直方图均衡化,最后合并所有通道即可。下面介绍下二个主要函数cvSplit()和cvMerge()。

一.cvSplit

函数功能:分割多通道数组成几个单通道数组或者从数组中提取一个通道。

函数原型:

/* Splits a multi-channel array into the set of single-channel arrays or

extracts particular [color] plane */

CVAPI(void)  cvSplit(

const CvArr* src,

CvArr* dst0,

CvArr* dst1,

CvArr* dst2,

CvArr* dst3

);

参数说明:

第一个参数表示输入的多通道数组即输入图像。

第二,三,四,五个参数分别表示输出的单通道数组。

二.cvMerge

函数功能:分割多通道数组成几个单通道数组或者从数组中提取一个通道。

函数原型:

/* Merges a set of single-channel arrays into the single multi-channel array

or inserts one particular [color] plane to the array */

CVAPI(void)  cvMerge(

const CvArr* src0,

const CvArr* src1,

const CvArr* src2,

const CvArr* src3,

CvArr* dst

);

参数说明:

第一,二,三,四个参数表示输入的单通道数组。

第五个参数分别表示合并后的多通道数组即输出图像。

下面给出完整的代码:

//图像增强- 彩色直方图均衡化
//By MoreWindows (http://blog.csdn.net/MoreWindows)
#include <opencv2/opencv.hpp>
using namespace std;
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
//彩色图像的直方图均衡化
IplImage* EqualizeHistColorImage(IplImage *pImage)
{IplImage *pEquaImage = cvCreateImage(cvGetSize(pImage), pImage->depth, 3);// 原图像分成各通道后再均衡化,最后合并即彩色图像的直方图均衡化const int MAX_CHANNEL = 4;IplImage *pImageChannel[MAX_CHANNEL] = {NULL};int i;for (i = 0; i < pImage->nChannels; i++)pImageChannel[i] = cvCreateImage(cvGetSize(pImage), pImage->depth, 1);cvSplit(pImage, pImageChannel[0], pImageChannel[1], pImageChannel[2], pImageChannel[3]);for (i = 0; i < pImage->nChannels; i++)cvEqualizeHist(pImageChannel[i], pImageChannel[i]);cvMerge(pImageChannel[0], pImageChannel[1], pImageChannel[2], pImageChannel[3], pEquaImage);for (i = 0; i < pImage->nChannels; i++)cvReleaseImage(&pImageChannel[i]);return pEquaImage;
}
int main( int argc, char** argv )
{   const char *pstrWindowsSrcTitle = "原图(http://blog.csdn.net/MoreWindows)";const char *pstrWindowsHisEquaTitle = "直方图均衡化后(http://blog.csdn.net/MoreWindows)";// 从文件中加载原图IplImage *pSrcImage = cvLoadImage("lena.jpg", CV_LOAD_IMAGE_UNCHANGED);IplImage *pHisEquaImage = EqualizeHistColorImage(pSrcImage);cvNamedWindow(pstrWindowsSrcTitle, CV_WINDOW_AUTOSIZE);cvNamedWindow(pstrWindowsHisEquaTitle, CV_WINDOW_AUTOSIZE);cvShowImage(pstrWindowsSrcTitle, pSrcImage);cvShowImage(pstrWindowsHisEquaTitle, pHisEquaImage);cvWaitKey(0);cvDestroyWindow(pstrWindowsSrcTitle);cvDestroyWindow(pstrWindowsHisEquaTitle);cvReleaseImage(&pSrcImage);cvReleaseImage(&pHisEquaImage);return 0;
}

运行结果如下所示:

呵呵,对比一下就知道直方图均衡化对图像增强的效果还不错,图像的对比度增加后,睫毛,头发等细小物体都要清晰多了。

【OpenCV入门指南】的直方图系列三篇到此就结束了,下面列出目录,方便大家查阅:

1. 《【OpenCV入门指南】第八篇灰度直方图》

2. 《【OpenCV入门指南】第九篇灰度直方图均衡化》

3. 《【OpenCV入门指南】第十篇彩色直方图均衡化》

下一篇《【OpenCV入门指南】第十一篇鼠标绘图》将介绍用OpenCV开发一个简单的鼠标绘图程序。欢迎继续浏览。

《OpenCV入门指南》系列文章地址:

http://blog.csdn.net/morewindows/article/category/1291764

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8364722

欢迎关注微博:http://weibo.com/MoreWindows

【OpenCV入门指南】第十篇 彩色直方图均衡化相关推荐

  1. 【OpenCV入门指南】第九篇 灰度直方图均衡化

    <OpenCV入门指南>系列文章地址: http://blog.csdn.net/morewindows/article/category/1291764 转载请标明出处,原文地址:htt ...

  2. OpenCV图像处理学习二十,图像直方图均衡化原理与实现

    一.图像直方图的概念 图像直方图,是指对整个图像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图.直方图反映了图像灰度的分布情况,是图像的统计学特征.图像的灰度直方 ...

  3. 【OpenCV入门指南】第十三篇 人脸检测

    原文出处:http://blog.csdn.net/MoreWindows/article/details/8426318#t2 本篇介绍图像处理与模式识别中最热门的一个领域--人脸检测(人脸识别). ...

  4. 【OpenCV入门指南】第五篇轮廓检测 下

    上一篇<[OpenCV入门指南]第五篇轮廓检测上>介绍了cvFindContours函数和cvDrawContours函数,并作了一个简单的使用示范.本篇将展示一个实例,让大家对轮廓检测有 ...

  5. 【OpenCV入门指南】第五篇 轮廓检测 上

    <[OpenCV入门指南]第三篇Canny边缘检测>中介绍了边缘检测,本篇介绍轮廓检测,轮廓检测的原理通俗的说就是掏空内部点,比如原图中有3*3的矩形点.那么就可以将中间的那一点去掉. 在 ...

  6. 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

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

  7. 【OpenCV入门教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)

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

  8. 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀

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

  9. 转:【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀

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

最新文章

  1. 困恼的mappedBy
  2. Java程序员必备基础:Java代码是怎么运行的?
  3. 清华大学郑莉c++答疑
  4. python加密程序_Python加密程序
  5. 商汤科技「工业视觉AI」研发介绍
  6. 设计灵感|简单的几何图形还能这么用在网页设计中!
  7. ethtool 原理介绍和解决网卡丢包排查思路(附ethtool源码下载)
  8. Ckeditor插件
  9. 编程语言对比 函数定义
  10. php rc5,ThinkPHP 6.0 RC5 发布,多应用模式独立及中间件机制调整
  11. php案例之后台数据显示-- mysqli面向过程版(procedure oriented programming = POP)
  12. 群晖NAS教程(十三)、利用Web Station安装wordpress博客
  13. Actors编程模型
  14. 如何利用语音评测技术设计英语口语选择题
  15. 2023最新织梦CMS高端红酒酒水类网站模板源码+SEO全屏自适应布局
  16. 防止电脑锁屏html 代码 适合IE下运行
  17. 【错解】【附正解】“科林明伦杯”哈尔滨理工大学第十届程序设计竞赛 - E 赛马
  18. 数据结构与算法精选面试50题(附答案)
  19. typora安装PicGo+配置腾讯云COS图床
  20. 照片估计明星身高matlab,对比上万张合照,国内男星身高终极论证

热门文章

  1. cpu soft lockup
  2. 怎么快速的访问化学绘图软件文件
  3. 英语学习方法备忘_2
  4. 信息技术计算机说课,信息技术说课稿
  5. 计算两组2D bbox的IOU
  6. 行业沙龙第六期丨数字化采购寻源,实现阳光采购
  7. 光猫和路由器(联通)
  8. Python高效替代Excel了,你会吗?
  9. NYIST 113 字符串替换
  10. hibernate映射文件set key one-to-many 解释