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

  • 相关阅读:
    LeetCode 242. Valid Anagram (验证变位词)
    LeetCode 205. Isomorphic Strings (同构字符串)
    LeetCode 204. Count Primes (质数的个数)
    LeetCode 202. Happy Number (快乐数字)
    LeetCode 170. Two Sum III
    LeetCode 136. Single Number (落单的数)
    LeetCode 697. Degree of an Array (数组的度)
    LeetCode 695. Max Area of Island (岛的最大区域)
    Spark中的键值对操作
    各种排序算法总结
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6824636.html
Copyright © 2011-2022 走看看