图像直方图均衡化和图像一般的拉伸
2016-07-11 18:09
387 查看
1. HE.h HE.c
HE.h
HE.c
2. HistogramEqualization.cpp
3.
原始图像
![](http://img.blog.csdn.net/20160711180707338)
直方图均衡化后图像
![](http://img.blog.csdn.net/20160711181009407)
一般图像拉伸后图像
HE.h
#ifndef _HE_H_ #define _HR_H_ #ifdef __cplusplus extern "C" { #endif //直方图均衡化 int HE(unsigned char * data, int width, int height); //图像一般拉伸 int HETemp(unsigned char * data, int width, int height); #ifdef __cplusplus } #endif #endif
HE.c
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <memory.h> #include "HE.h" int HE(unsigned char * data, int width, int height){ int ret = 0; int i, j; int arr[255] = {0}; float p[255] = {0.0f}; float c[255] = {0.0f}; int minValue = 255, maxValue = 0; unsigned char * dstData = NULL; int temp = 0; for(i = 0; i < height; i ++) { for(j = 0; j < width; j ++) { arr[(int)data[i * width + j]] += 1; if((int)data[i * width + j] > maxValue) { maxValue = (int)data[i * width + j]; }else if((int)data[i * width + j] < minValue) { minValue = (int)data[i * width + j]; } } } for(i = minValue; i < maxValue; i ++) { p[i] = arr[i] * 1.0f / (width * height); } for(i = minValue; i < maxValue; i ++) { for(j = minValue; j <= i; j ++) { c[i] += p[j]; } } dstData = (unsigned char *)malloc(sizeof(unsigned char) * width * height); for(i = 0; i < height; i ++) { for(j = 0; j < width; j ++) { temp = (int)(c[(int)data[i * width + j]] * 255); dstData[i * width + j] = (unsigned char)temp; } } memcpy(data, dstData, sizeof(unsigned char) * width * height); free(dstData); return 0; } int HETemp(unsigned char * data, int width, int height) { int i, j; int maxValue = 0, minValue = 255; int temp = 0; for(i = 0; i < height; i ++) { for(j = 0; j < width; j ++) { if(maxValue < (int)data[i * width + j]) { maxValue = (int)data[i * width + j]; }else if(minValue > (int)data[i * width + j]) { minValue = (int)data[i * width + j]; } } } for(i = 0; i < height; i ++) { for(j = 0; j < width; j ++) { temp = (int)((data[i * width + j] - minValue) * 1.0f / (maxValue - minValue) * 255.0f); data[i * width + j] = (unsigned char)temp; } } return 0; }
2. HistogramEqualization.cpp
#include "HE.h" #include <opencv2\opencv.hpp> using namespace cv; int main(void) { Mat img; img = imread("source.bmp", 0); //HE(img.data, img.cols, img.rows); HETemp(img.data, img.cols, img.rows); imwrite("HETemp.bmp", img); return 0; }
3.
原始图像
直方图均衡化后图像
一般图像拉伸后图像
相关文章推荐
- PHP GD 图像处理组件的常用函数总结
- PHP图像处理之imagecreate、imagedestroy函数介绍
- jsvascript图像处理―(计算机视觉应用)图像金字塔
- Javascript图像处理思路及实现代码
- PHP图像处理之使用imagecolorallocate()函数设置颜色例子
- java数字图像处理基础使用imageio写图像文件示例
- 使用Java进行图像处理的一些基础操作
- javascript图像处理―边缘梯度计算函数
- Javascript图像处理―阈值函数实例应用
- Javascript图像处理―虚拟边缘介绍及使用方法
- PHP图像处理类库及演示分享
- CI框架文件上传类及图像处理类用法分析
- php图像处理函数大全(推荐收藏)
- Javascript图像处理―图像形态学(膨胀与腐蚀)
- Javascript图像处理―平滑处理实现原理
- Swift图像处理之优化照片
- 在Ubuntu上安装OpenCV3.0和Python-openCV的经历
- CI框架文件上传类及图像处理类用法分析
- VTK学习笔记之图像处理
- vtk 图像处理 多种 操作