zoukankan      html  css  js  c++  java
  • OpenCV入门学习(三)HistogramEquivalent

                                     直方图均衡





    #include <opencv2corecore.hpp>
    #include <opencv2highguihighgui.hpp>
    #include <opencv2imgprocimgproc.hpp>
    /*
    	有的版本号CV_BGR2GRAY宏定义没有,须要载入个legacy文件来获取,可是会与其它调用的宏定义出现冲突,所以
    	这里单独定义一个彩色图像到灰度图像的case number 
    */
    #define CV_BGR2GRAY 6
    #include <iostream>
    using namespace std;
    using namespace cv;
    
    Mat HistogramEquivalent(Mat,int);
    
    int main(){
    	Mat img = imread("lenna.jpg");
    	imshow("HistogramEqiovalent",HistogramEquivalent(img,256));
    	waitKey(100000000);
    }
    
    /**
    	方法:直方图均衡
    	作用:增强图像的对照度,使图像更加清楚,即图像增强的一种方法
    	參数:img表示源图像。scalar表示的是最大灰度级(为2时表示二值图像)
    */
    Mat HistogramEquivalent(Mat img,int scalar){
    	
    	//把图像变成灰度图像
    	if(img.channels()!=1)
    		cvtColor(img,img,CV_BGR2GRAY);
    	//创建个与源图像一样的空图像
    	Mat newImage=Mat(img.rows,img.cols,img.type());
    	//获取图像的行和列
    	int width = img.cols , height = img.rows;
    	int count[256]={0};
    	double prob[256] = {0};
    	int maxPixel = 0,minPixel =scalar-1;
    	
    	for(size_t i = 0;i<height;i++)
    		for(size_t j=0;j<width;j++){
    			int currPixel = img.at<uchar>(i,j);
    			count[currPixel]++; //统计每一个灰度级有多少个点
    			//统计该图像中最大和最小的像素值
    			if(currPixel>maxPixel)
    				maxPixel = currPixel;
    			else if(currPixel<minPixel)
    				minPixel = currPixel;
    		}
    	
    	//计算每一个灰度级出现的概率,为获取double型的数据,在后面乘个小数1.0进行隐式转换		
    	for(size_t num = 0;num<scalar;num++)
    		prob[num] = count[num]*1.0/(height*width);	
    	//计算累积数组
    	for(size_t i = 1;i<scalar;i++)
    		prob[i] += prob[i-1];
    	for(size_t i=0;i<height;i++)
           for(size_t j=0;j<width;j++)
    		   newImage.at<uchar>(i,j) = prob[img.at<uchar>(i,j)]*(maxPixel-minPixel)+minPixel;
    	return newImage;
    }

  • 相关阅读:
    ListView的CheckBox实现全部选中/不选中
    JTA 深度历险
    缓存更新的套路是怎样的?
    对ThreadLocal实现原理的一点思考
    透彻理解Spring事务设计思想之手写实现
    JAVA 线程池架构浅析
    ThreadPoolExecutor 线程池浅析
    MySql实现sequence功能的代码
    MySql事务select for update及数据的一致性处理讲解
    MySQL四种事务隔离级别详解
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6824635.html
Copyright © 2011-2022 走看看