本文实现彩色图像的全局直方图均衡。分别对R/G/B三通道均衡,读写图片采用OpenCV。代码如下:

#include

//#include

//#include

//#include

#include

#include

#include

#include "EqualizeHist.h"

//typedef unsigned char uchar;

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]);

EqualizeHist( (uchar*)(pImageChannel[i]->imageData), (uchar*)(pImageChannel[i]->imageData),pImage->width,pImage->height );

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 )

{

IplImage* pImg; //声明IplImage指针

IplImage* pEquaImage;

clock_t start, finish;

double time;

//载入图像,强制转化为Gray

pImg = cvLoadImage( "nupt.jpg", CV_LOAD_IMAGE_UNCHANGED);

if(pImg==NULL)

return -1;

printf("Load img success\n");

start = clock();

pEquaImage = EqualizeHistColorImage(pImg);

finish = clock();

time = (double)(finish - start) / CLOCKS_PER_SEC;

printf( "finish operation for %dchannels in %lf seconds\n",pImg->nChannels,time);

cvNamedWindow("src",CV_WINDOW_AUTOSIZE);

cvNamedWindow("dst",CV_WINDOW_AUTOSIZE);

cvShowImage("src",pImg);

cvShowImage("dst",pEquaImage);

cvWaitKey(0);

cvSaveImage("ret.jpg", pEquaImage);//把图像写入文件

cvReleaseImage(&pImg); //释放图像

cvReleaseImage(&pEquaImage);

return 0;

}

//#include

#include

typedef unsigned char uchar;

void EqualizeHist( const unsigned char* src,unsigned char* dst,int width,int height )

{

int x,y;

const int hist_sz = 256;

int hist[hist_sz];

memset(hist, 0, sizeof(hist));

int size = width*height;

//统计每个灰度值出现的次数

for(x=0;x

assert(*(src+x)<257 && *(src+x)>=0);

hist[*(src+x)]++;

}

float scale = 255.f/(width*height);

int sum = 0;

uchar lut[hist_sz+1];

for(x = 0; x < hist_sz; x++ )

{

sum += hist[x];

//int val = round(sum*scale);

int val =(sum*scale+0.5);

lut[x] = val;

}

lut[0] = 0;

for( y = 0; y < size; y++ )

{

*(dst+y) = lut[*(src+y)];

if(y%100==0)

printf("%d\n",*(dst+y));

}

}

原图:

效果图

c语言增强图像直方图均衡化,图像直方图均衡化增强opencv与C语言版相关推荐

  1. 【opencv】(7) 图像匹配、直方图、图像均衡化

    各位同学好,今天和大家分享一下opencv中图像匹配方法,和图像均衡化方法 (1)模板匹配: cv2.matchTemplate():(2)图像直方图: cv2.calcHist():(3)图像均衡化 ...

  2. 图像算法一:【图像点运算】灰度直方图、伽马变换、灰度阈值变换、分段线性变换、直方图均衡化

    灰度直方图:imhist() %描述了图像灰度统计信息,主要应用于图像分割和图像灰度变换.>>Img=imread( ' xxx.jpg' ); %读图>>I=imhist(I ...

  3. 【图像处理】图像强度变换、直方图均衡化(Image Intensity Transformations and Histogram Equalization)

    实验要求   该实验使用强度变换方法对图像进行增强.实验图像为图3.8(a)   (1.a) 用公式(3.2-2)所示的对数变换方法进行图像增强.   (1.b) 用公式(3.2-3)形式的指数变换方 ...

  4. Matlab数字图像处理 02 灰度变化(图像直方图、直方图均衡化、直方图匹配)

    第二章 灰度变化 2.1 图像的亮度.对比度和动态范围 2.1.1 亮度 2.1.2 对比度 2.1.3 动态范围 2.2 线性灰度变换 2.2.1 具有饱和处理的线性灰度变换 2.2.2 分段线性灰 ...

  5. Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)

    Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...

  6. 【python】直方图均衡化和自适应均衡化图像

    1.代码 import cv2 import matplotlib.pyplot as pltimg=cv2.imread('./bike.jpg',0)#读取图片 #进行直方图均衡化 res=cv2 ...

  7. opencv 绘制图像直方图,实现直方图均衡化

    直方图 直方图简单来说就是图像中每个像素值的个数统计,比如说一副灰度图中像素值为0的有多少个,1的有多少个--直方图是一种分析图像的手段: 直方图计算 opencv库计算直方图 使用 cv.calcH ...

  8. python库skimage 图像直方图均衡化、自适应均衡化、对比度拉伸实现

    直方图全局均衡化 from skimage import exposure # Equalization img_eq = exposure.equalize_hist(img) 直方图自适应均衡化 ...

  9. MATLAB可视化实战系列(二十五)-MATLAB基于直方图的图像去雾

    前言 直方图是图像的一种统计表达形式,在一定程度上能够反映数学图像的概貌性描述,包括图像的灰度范围.灰度分布.整幅图像的亮度均值.阴暗对比度等,并可以此为基础进行分析来得出对图像进一步处理的重要依据. ...

  10. 基于python的对比度增强(线性变换、直方图正规化、直方图均衡化、CLAHE)

    线性变换 假设输入图像为I,宽为W,高为H,输出图像为O,图像的线性变换可以用以下公式定义: O(r,c)=a×I(r,c)+b,0≤r<H,0≤c<WO(r, c) = a × I(r, ...

最新文章

  1. 对于Chua 混沌电路进一步测试
  2. python遍历目录压缩文件夹然后在发送邮件_python目录操作之python遍历文件夹后将结果存储为xml...
  3. Laravel-数据库操作笔记
  4. 用SQL进行嵌套查询
  5. MapReduce分区-代码实现
  6. SpringCloud系列十三:Feign对继承、压缩、日志的支持以及构造多参数请求
  7. bzoj 3036: 绿豆蛙的归宿(Dp)
  8. $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI']三者的区别
  9. Android表格布局之设置边框
  10. 川土微 | CA-IS3105W 全集成 DC-DC 转换器
  11. java socket唯一标识符_java Socket
  12. SQL Server 修改字段名
  13. 单片机c语言msb全称,51单片机英文缩写全称(整理最全)
  14. 论文中图像三维重建的思路
  15. 小福利,用excel制作旋风图,小狗图和漏斗图
  16. 位于本地计算机上 错误1068怎么办,错误1068怎么解决
  17. 配置文件导入服务器什么意思,配置服务器需要什么意思
  18. tensorflow.keras入门1
  19. [虚拟机保护] [原创]关于滴水的VT调试器
  20. Open-falcon安装(Open-Falcon超级详细安装步骤)

热门文章

  1. Nginx解决跨域问题的具体实现
  2. Paxos在Chubby中的应用
  3. 依赖版本控制-pom文件介绍
  4. 数据源(连接池)的作用
  5. 选择结构_穿透的switch语句
  6. Redis实现分布式锁原理SetNx命令
  7. 设计模式之_动态代理_06
  8. stm32定时器中断类型分析
  9. Linux---输入与输出函数总结
  10. kotlin使用spring data redis(二)