• 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;
    }

  • 相关阅读:
    IT职场中外企面试最爱提的问题
    数据库的最简单实现
    两则故事
    如何提升程序员的“性能”
    那些年看过的电影
    VIM技巧
    独立之精神,自由之思想
    「我只是认真」——聊聊工匠情怀
    在这里,你终究会真正地失败
    公共场所英文译写规范
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6824636.html
Copyright © 2020-2023  润新知