实验二 直方图均衡

一、实验目的:

掌握对图像直方图进行操作,实现图像的直方图均衡算法。 1、掌握求灰度图像归一化直方图方法 2、掌握灰度图像的直方图均衡算法 3、掌握对彩色图像进行直方图均衡的算法

二、实验内容:

1、计算灰度图像的归一化直方图。
具体内容:利用 OpenCV 对图像像素进行操作,计算归一化直方图.并在
窗口中以图形的方式显示出来
2、灰度图像直方图均衡处理
具体内容:通过计算归一化直方图,设计算法实现直方图均衡化处理。
3、彩色图像直方图均衡处理
具体内容: 在灰度图像直方图均衡处理的基础上实现彩色直方图均衡处理。

三.实验过程

(一).1、计算灰度图像的归一化直方图。

具体内容:利用 OpenCV 对图像像素进行操作,计算归一化直方图.并在
窗口中以图形的方式显示出来

实现代码:

首先主函数将图像以灰度图像读入。

int main(int argc,char* argv[]){
   
    const char* imageName="/Users/Admin/Desktop/myProject/2.jpg";
    Mat img,grayImage;
    img=imread(imageName);
    //以灰度图像读入
    grayImage=imread(imageName,0);
    if (img.empty()||grayImage.empty()){
   
        fprintf(stderr, "Can't load image %s\n",imageName);
        return -1;
    }
    
    

进行实验一相关,计算图像的归一化直方图并显示出来
主函数中写入:

  //实验一:归一化直方图
    Mat result1=grayImage.clone();
    result1=show_histogram(result1);
    imshow("灰度直方图归一化", result1);
    //waitKey(0);

直方图打印:

//打印直方图
Mat show_histogram(Mat img){
   
    int channels=0;
    MatND dstHist;
    //设定像素取值范围
    int hisSize[]={
   256};
    float midRanges[]={
   0,255};
    const float *ranges[]={
   midRanges};
    //计算直方图
    calcHist(&img, 1, &channels, Mat(), dstHist, 1, hisSize, ranges,true,false);
    Mat drawImage=Mat::zeros(Size(256,256), CV_8UC3);
    double MaxValue;
    minMaxLoc(dstHist,0,&MaxValue,0,0);//图像最小最大值
    for (int i=0;i<256;i++){
   
        int value=cvRound(dstHist.at<float>(i)*256*0.9/MaxValue);//四舍五入
        //在直方图画布上画出直方图
        line(drawImage, Point(i,drawImage.rows-1), Point(i,drawImage.rows-1-value), Scalar(255,255,255));
    }
    return drawImage;
}

实验结果:

在这里插入图片描述

(二).2、灰度图像直方图均衡处理

2、灰度图像直方图均衡处理
具体内容:通过计算归一化直方图,设计算法实现直方图均衡化处理。

首先统计像素总数,每个灰度级别下的像素个数,记录灰度分布密度,然后统计 p r ( r k ) p_r(r_k) pr(rk)灰度级别出现频率

代码实现:

//实验二:均衡化直方图
	int gray_sum=0;//像素总数
    int gray[256]={
   0};//记录每个灰度级别下的像素个数
    int gray_rate[256]={
   0};//记录灰度分布密度
    gray_sum=grayImage.rows*grayImage.cols;
    //统计每个灰度下的像素个数
    for(int i=0;i<grayImage
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值