温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

OpenCV C++中直方图均衡化技巧

发布时间:2024-08-26 17:33:42 来源:亿速云 阅读:93 作者:小樊 栏目:编程语言

在OpenCV C++中,直方图均衡化是一种常用的图像处理技术,用于增强图像的视觉质量

  1. 包含必要的头文件:
#include <opencv2/opencv.hpp>
#include<iostream>
  1. 加载图像并将其转换为灰度图像:
cv::Mat image = cv::imread("input.jpg", cv::IMREAD_COLOR);
cv::Mat gray_image;
cv::cvtColor(image, gray_image, cv::COLOR_BGR2GRAY);
  1. 计算原始图像的直方图:
int histSize = 256;
float range[] = {0, 256};
const float* histRange = {range};
cv::Mat hist;
calcHist(&gray_image, 1, 0, cv::Mat(), hist, 1, &histSize, &histRange, true, false);
  1. 对原始直方图进行归一化处理:
cv::Mat norm_hist;
cv::normalize(hist, norm_hist, 0, 255, cv::NORM_MINMAX, -1, cv::Mat());
  1. 计算累积直方图:
cv::Mat cumulative_hist(histSize, 1, CV_32F);
cumulative_hist.at<float>(0) = norm_hist.at<float>(0);
for (int i = 1; i< histSize; i++) {
    cumulative_hist.at<float>(i) = cumulative_hist.at<float>(i - 1) + norm_hist.at<float>(i);
}
  1. 应用直方图均衡化:
cv::Mat equalized_image(image.rows, image.cols, CV_8UC1);
for (int y = 0; y< image.rows; y++) {
    for (int x = 0; x< image.cols; x++) {
        int pixelValue = static_cast<int>(gray_image.at<uchar>(y, x));
        equalized_image.at<uchar>(y, x) = static_cast<uchar>(cumulative_hist.at<float>(pixelValue));
    }
}
  1. 显示原始图像和均衡化后的图像:
cv::imshow("Original Image", image);
cv::imshow("Equalized Image", equalized_image);
cv::waitKey(0);

这个示例展示了如何使用OpenCV C++实现直方图均衡化。请注意,这里我们只处理了灰度图像。如果你想处理彩色图像,可以先将其分解为多个通道(红、绿、蓝),然后对每个通道应用相同的操作。最后,将处理过的通道合并成一个新的彩色图像。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI