直方图均衡化
直方图均衡化是一种用于增强图像对比度的图像处理技术。它通过重新分布图像的像素值,以使图像的直方图变得更均匀,从而提高图像的视觉质量。在OpenCV中,您可以使用 cv::equalizeHist
函数来执行直方图均衡化。以下是 cv::equalizeHist
函数的基本用法:
cpp
cv::equalizeHist(src, dst);
src
: 输入的灰度图像。dst
: 输出图像,用于存储均衡化后的结果。
cv::equalizeHist
函数将对输入图像进行直方图均衡化,然后将结果保存在 dst
中。这将使图像的对比度增加,细节更加清晰。
以下是一个示例,演示如何使用 cv::equalizeHist
函数进行直方图均衡化:
cpp
#include <opencv2/opencv.hpp>
int main() {
cv::Mat image = cv::imread("1.jpg", cv::IMREAD_GRAYSCALE); // 灰度图像
if (image.empty()) {
std::cerr << "无法加载图像" << std::endl;
return -1;
}
cv::Mat equalizedImage;
// 执行直方图均衡化
cv::equalizeHist(image, equalizedImage);
cv::imshow("原始图像", image);
cv::imshow("均衡化后的图像", equalizedImage);
cv::waitKey(0);
return 0;
}
在这个示例中,我们加载了一张灰度图像,然后使用 cv::equalizeHist
函数对图像进行直方图均衡化,最后显示原始图像和均衡化后的图像。直方图均衡化通常用于提高低对比度图像的视觉质量。
相机实时直方图均衡化
cpp
#include <opencv2/opencv.hpp>
int main() {
cv::VideoCapture cap(0); // 打开本地相机(通常是0号摄像头)
if (!cap.isOpened()) {
std::cerr << "无法打开相机" << std::endl;
return -1;
}
while (true) {
cv::Mat frame;
cap >> frame; // 从相机捕获一帧图像
if (frame.empty()) {
std::cerr << "无法捕获图像" << std::endl;
break;
}
cv::Mat grayFrame;
cv::cvtColor(frame, grayFrame, cv::COLOR_BGR2GRAY); // 转换为灰度图像
// 应用直方图均衡化
cv::Mat equalizedFrame;
cv::equalizeHist(grayFrame, equalizedFrame);
cv::imshow("原始图像", grayFrame);
cv::imshow("均衡化后的图像", equalizedFrame);
// 检查用户是否按下ESC键,然后退出循环
if (cv::waitKey(1) == 27) {
break;
}
}
return 0;
}