c语言增强图像直方图均衡化,图像直方图均衡化增强opencv与C语言版
本文实现彩色图像的全局直方图均衡。分别对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语言版相关推荐
- 【opencv】(7) 图像匹配、直方图、图像均衡化
各位同学好,今天和大家分享一下opencv中图像匹配方法,和图像均衡化方法 (1)模板匹配: cv2.matchTemplate():(2)图像直方图: cv2.calcHist():(3)图像均衡化 ...
- 图像算法一:【图像点运算】灰度直方图、伽马变换、灰度阈值变换、分段线性变换、直方图均衡化
灰度直方图:imhist() %描述了图像灰度统计信息,主要应用于图像分割和图像灰度变换.>>Img=imread( ' xxx.jpg' ); %读图>>I=imhist(I ...
- 【图像处理】图像强度变换、直方图均衡化(Image Intensity Transformations and Histogram Equalization)
实验要求 该实验使用强度变换方法对图像进行增强.实验图像为图3.8(a) (1.a) 用公式(3.2-2)所示的对数变换方法进行图像增强. (1.b) 用公式(3.2-3)形式的指数变换方 ...
- Matlab数字图像处理 02 灰度变化(图像直方图、直方图均衡化、直方图匹配)
第二章 灰度变化 2.1 图像的亮度.对比度和动态范围 2.1.1 亮度 2.1.2 对比度 2.1.3 动态范围 2.2 线性灰度变换 2.2.1 具有饱和处理的线性灰度变换 2.2.2 分段线性灰 ...
- Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...
- 【python】直方图均衡化和自适应均衡化图像
1.代码 import cv2 import matplotlib.pyplot as pltimg=cv2.imread('./bike.jpg',0)#读取图片 #进行直方图均衡化 res=cv2 ...
- opencv 绘制图像直方图,实现直方图均衡化
直方图 直方图简单来说就是图像中每个像素值的个数统计,比如说一副灰度图中像素值为0的有多少个,1的有多少个--直方图是一种分析图像的手段: 直方图计算 opencv库计算直方图 使用 cv.calcH ...
- python库skimage 图像直方图均衡化、自适应均衡化、对比度拉伸实现
直方图全局均衡化 from skimage import exposure # Equalization img_eq = exposure.equalize_hist(img) 直方图自适应均衡化 ...
- MATLAB可视化实战系列(二十五)-MATLAB基于直方图的图像去雾
前言 直方图是图像的一种统计表达形式,在一定程度上能够反映数学图像的概貌性描述,包括图像的灰度范围.灰度分布.整幅图像的亮度均值.阴暗对比度等,并可以此为基础进行分析来得出对图像进一步处理的重要依据. ...
- 基于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, ...
最新文章
- 对于Chua 混沌电路进一步测试
- python遍历目录压缩文件夹然后在发送邮件_python目录操作之python遍历文件夹后将结果存储为xml...
- Laravel-数据库操作笔记
- 用SQL进行嵌套查询
- MapReduce分区-代码实现
- SpringCloud系列十三:Feign对继承、压缩、日志的支持以及构造多参数请求
- bzoj 3036: 绿豆蛙的归宿(Dp)
- $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI']三者的区别
- Android表格布局之设置边框
- 川土微 | CA-IS3105W 全集成 DC-DC 转换器
- java socket唯一标识符_java Socket
- SQL Server 修改字段名
- 单片机c语言msb全称,51单片机英文缩写全称(整理最全)
- 论文中图像三维重建的思路
- 小福利,用excel制作旋风图,小狗图和漏斗图
- 位于本地计算机上 错误1068怎么办,错误1068怎么解决
- 配置文件导入服务器什么意思,配置服务器需要什么意思
- tensorflow.keras入门1
- [虚拟机保护] [原创]关于滴水的VT调试器
- Open-falcon安装(Open-Falcon超级详细安装步骤)