c++视觉处理---直方图均衡化

直方图均衡化

直方图均衡化是一种用于增强图像对比度的图像处理技术。它通过重新分布图像的像素值,以使图像的直方图变得更均匀,从而提高图像的视觉质量。在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;
}
相关推荐
驴友花雕34 分钟前
【花雕学编程】Arduino BLDC 之群体机器人协同探索
c++·单片机·嵌入式硬件·arduino bldc·群体机器人协同探索
驴友花雕37 分钟前
【花雕学编程】Arduino BLDC 之仿人机器人膝关节稳定系统
c++·单片机·嵌入式硬件·arduino bldc·仿人机器人膝关节稳定系统
Qhumaing1 小时前
C++学习:【PTA】数据结构 7-1 实验7-1(最小生成树-Prim算法)
c++·学习·算法
Z1Jxxx3 小时前
01序列01序列
开发语言·c++·算法
bryant_meng3 小时前
【DLNR】《High-frequency Stereo Matching Network》
人工智能·深度学习·计算机视觉·stereo matching·dlnr
坚定学代码3 小时前
基于观察者模式的ISO C++信号槽实现
开发语言·c++·观察者模式·ai
ha20428941944 小时前
Linux操作系统学习记录之---TcpSocket
linux·网络·c++·学习
AI视觉网奇5 小时前
ue5 插件 WebSocket
c++·ue5
左直拳5 小时前
将c++程序部署到docker
开发语言·c++·docker
恒者走天下5 小时前
AI智能体通讯项目(底层AI通讯协议实现)
c++