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

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

相关文章

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

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系