直方图均衡化opencv源码 C++
时间: 2023-08-31 08:07:21 浏览: 56
以下是一段使用OpenCV进行直方图均衡化的示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main()
{
// 读取图像
cv::Mat image = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);
if (image.empty()) {
std::cerr << "Failed to read image" << std::endl;
return -1;
}
// 进行直方图均衡化
cv::Mat equalizedImage;
cv::equalizeHist(image, equalizedImage);
// 显示原始图像和均衡化后的图像
cv::imshow("Original Image", image);
cv::imshow("Equalized Image", equalizedImage);
cv::waitKey(0);
return 0;
}
```
请确保你已经安装了OpenCV,并将待处理的图像放在程序所在的目录中,命名为"input.jpg"。该代码会加载灰度图像,对其进行直方图均衡化,并显示原始图像和均衡化后的图像。
相关问题
直方图均衡化opencv
直方图均衡化是一种图像处理方法,通过调整图像的直方图来改善图像的对比度。在OpenCV中,可以使用equalizeHist函数来实现直方图均衡化。[1]该函数接受一个灰度图像作为输入,并将其Y通道进行直方图均衡化。具体步骤如下:
1. 将彩色图像转换为YCrCb颜色空间。
2. 将YCrCb图像拆分为三个通道,其中Y通道表示亮度。
3. 对Y通道进行直方图均衡化。
4. 将均衡化后的Y通道与Cr和Cb通道重新合并为YCrCb图像。
5. 将YCrCb图像转换回BGR颜色空间。
6. 显示原始图像和均衡化后的图像进行对比。[2]
通过直方图均衡化,可以增加图像的对比度,并提升细节的可见性。然而,直方图均衡化也有一些缺点,例如增加背景噪声并减少有用信号的问题。因此,在应用直方图均衡化时需要权衡这些因素。[2][3]
opencv c++直方图均衡化
以下是使用OpenCV C++进行直方图均衡化的示例代码:
```cpp
void histogram_eq_demo(Mat& image) {
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY); Mat dst;
equalizeHist(gray, dst);
imshow("灰度图", gray);
imshow("直方图均衡化", dst);
}
```
这段代码将输入图像转换为灰度图像,然后使用`equalizeHist`函数对灰度图像进行直方图均衡化处理。最后,通过`imshow`函数显示原始灰度图像和直方图均衡化后的图像。
直方图均衡化的作用是通过改变图像的直方图来增强图像的对比度,使得图像更加清晰。它通过将像素个数多的灰度值进行展宽,像素个数少的灰度值进行归并,从而使得图像中的灰度值分布更加均匀。