实验二 直方图均衡 您所在的位置:网站首页 图像二值化实验报告 实验二 直方图均衡

实验二 直方图均衡

2023-08-04 10:05| 来源: 网络整理| 查看: 265

文章目录 一、实验目的:二、实验内容:三.实验过程(一).1、计算灰度图像的归一化直方图。实现代码:实验结果: (二).2、灰度图像直方图均衡处理代码实现:实现效果: (三).3、彩色图像直方图均衡处理代码实现: 全部代码实现:相关函数应用方法:

一、实验目的:

掌握对图像直方图进行操作,实现图像的直方图均衡算法。 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;i0};//记录每个灰度级别下的像素个数 int gray_rate[256]={0};//记录灰度分布密度 gray_sum=grayImage.rows*grayImage.cols; //统计每个灰度下的像素个数 for(int i=0;i int value=p[j]; gray[value]++; } } //统计灰度频率 for(int i=0;i0};//记录累计密度 int gray_equal[256]={0};//均衡化后的灰度值 //计算累计密度 gray_distribution[0]=gray_rate[0]; for (int i=1;i gray_equal[i]=(uchar)(255*gray_distribution[i]+0.5); } //直方图均衡化,更新原图每个像素点的值 for(int i=0;i p[j]=gray_equal[p[j]]; } } imshow("result2_picture", result2); result2=show_histogram(result2); imshow("result2", result2); //waitKey(0); 实现效果:

在这里插入图片描述

(三).3、彩色图像直方图均衡处理

具体内容: 在灰度图像直方图均衡处理的基础上实现彩色直方图均衡处理。

代码实现: //实验三:彩色直方图均衡 Mat result3=img.clone(); if (!result3.data) { cout cout256}; 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 const char* imageName="/Users/Admin/Desktop/myProject/1.jpg"; Mat img,grayImage; img=imread(imageName); //以灰度图像读入 grayImage=imread(imageName,0); imshow("grayImage", grayImage); if (img.empty()||grayImage.empty()){ fprintf(stderr, "Can't load image %s\n",imageName); return -1; } int gray_sum=0;//像素总数 int gray[256]={0};//记录每个灰度级别下的像素个数 double gray_rate[256]={0};//记录灰度分布密度 gray_sum=grayImage.rows*grayImage.cols; //统计每个灰度下的像素个数 for(int i=0;i int value=p[j]; gray[value]++; } } //统计灰度频率 for(int i=0;i0};//记录累计密度 int gray_equal[256]={0};//均衡化后的灰度值 //计算累计密度 gray_distribution[0]=gray_rate[0]; for (int i=1;i gray_equal[i]=(uchar)(255*gray_distribution[i]+0.5); } //直方图均衡化,更新原图每个像素点的值 for(int i=0;i p[j]=gray_equal[p[j]]; } } imshow("result2_picture", result2); result2=show_histogram(result2); imshow("result2", result2); //实验三:彩色直方图均衡 Mat result3=img.clone(); if (!result3.data) { cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有