如何在 OpenCV 中使用 C++ 应用直方图均衡化?


直方图表示图像的深度强度。例如,考虑一个颜色深度为 8 位的图像。这意味着每个像素的颜色深度可以从 0 到  意味着从 0 到 255。如果图像是 RGB 图像,则它具有红色、绿色和蓝色通道。例如,在图像的某一点,只有红色。那么该图像的颜色深度位于红色通道中,像素值将从 0 变化到 255。0 表示没有红色,255 表示更多红色。

直方图显示了所有通道和所有颜色的此类结果。通过更改像素的值,您可以更改某些特定颜色像素的强度。例如,如果您想增加红色通道的密度,您可以更改红色通道的值。

首先,我们将在灰度图像中应用直方图均衡化。灰度图像仅包含黑色和白色。这意味着只有一个通道。该图像是 8 位图像。这意味着颜色深度从 0 到 255 不等。0 表示白色,255 表示黑色。在下面的代码中,我们将加载彩色图像并将其转换为灰度图像。然后,我们将使用 OpenCV 的“equalizeHist”函数来均衡像素值。

以下程序展示了如何在 OpenCV 中应用直方图均衡化。

示例

#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main() {
   Mat original;//Declaring a matrix//
   original = imread("view.jpg");//loading the image
   Mat gray;//declaring a matrix//
   cvtColor(original, gray, COLOR_BGR2GRAY);//converting to grayscale//
   Mat hist;//declaring a matrix//
   equalizeHist(gray, hist);//applying histogram equalizer
   namedWindow("Original");//window for actual image//
   namedWindow("gray");//window for grayscale image//
   namedWindow("histogram");//window for histogram//
   imshow("Original", original);//showing actual image//
   imshow("gray", gray);//showing grayscale image//
   imshow("histogram", hist);//showing histogram effect
   waitKey(0);//wait for keystroke//
   return(0);
}

输出

更新于: 2021年3月10日

498 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.