圖像處理基本算法-直方圖均衡

2023-10-12 01:08

本文主要是介绍圖像處理基本算法-直方圖均衡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 http://blog.csdn.net/renshengrumenglibing/article/details/7065330

直方圖是多種空間處理技術的基礎,可以用於圖像增強。同時在其他的處


理方法中也十分有用,比如圖像壓縮和分割。
基本的原理:
Ni = 255*(N0 + N1 + N2 +……Ni)/(width*height)
程序流程:
1、統計各個像素值的個數
2、建立映射表

3、賦予新值


處理後圖像:


源代碼:

[cpp] view plain copy print ?
  1. #include<cv.h>   
  2. #include<highgui.h>   
  3.   
  4. int main(){  
  5.     IplImage * image;  
  6.     image = cvLoadImage("E:\\image\\pollen.jpg",0);  
  7.     cvNamedWindow("image",CV_WINDOW_AUTOSIZE);  
  8.     //cvSaveImage("E:\\image\\pollen.jpg",image,0);  
  9.     cvShowImage("image",image);  
  10.     cvWaitKey(0);  
  11.     unsigned char * ptr;  
  12.     int count[256] = {0};//灰度值的個數  
  13.     int map[256];//灰度映射表  
  14.     int temp;  
  15.     if(image->nChannels == 3){  
  16.         return 0;  
  17.     }  
  18.   
  19.     else if(image->nChannels == 1){  
  20.         //統計各個灰度值的個數   
  21.         for(int i = 0 ; i < image->height;i++){  
  22.             for(int j = 0; j< image->width;j++){  
  23.             ptr = (unsigned char *)image->imageData + i*image->widthStep + j;   
  24.             count[*ptr]++;  
  25.             }  
  26.         }  
  27.         //建立映射表   
  28.         for(int m = 0 ; m< 256 ; m++){  
  29.             temp = 0;  
  30.             for(int n = 0 ; n<= m ;n++){  
  31.             temp += count[n];  
  32.             }  
  33.             map[m] = (unsigned char)(temp * 255/image->width/image->height);  
  34.         }  
  35.           
  36.         //給圖片賦予新值   
  37.         for(int i = 0 ; i < image->height;i++){   
  38.             for(int j = 0; j< image->width;j++){  
  39.                 ptr = (unsigned char *)image->imageData + i*image->widthStep +j;  
  40.                 *ptr = map[*ptr];  
  41.             }  
  42.         }  
  43.     }  
  44.     cvShowImage("image",image);  
  45.     cvWaitKey(0);  
  46.     cvSaveImage("E:\\image\\pollen2.jpg",image,0);  
  47.     return 0;  
  48. }  

 

这篇关于圖像處理基本算法-直方圖均衡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/192135

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

SpringCloud负载均衡spring-cloud-starter-loadbalancer解读

《SpringCloud负载均衡spring-cloud-starter-loadbalancer解读》:本文主要介绍SpringCloud负载均衡spring-cloud-starter-loa... 目录简述主要特点使用负载均衡算法1. 轮询负载均衡策略(Round Robin)2. 随机负载均衡策略(

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1