以下是使用C++和OpenCV读取光照不均匀图像进行目标检测的示例代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读取图像
    Mat img = imread("input.jpg", IMREAD_GRAYSCALE);
    if (img.empty())
    {
        cout << "无法读取图像文件" << endl;
        return -1;
    }

    // 均衡化图像的直方图
    Mat img_hist_equalized;
    equalizeHist(img, img_hist_equalized);

    // 创建CLAHE对象,进行自适应直方图均衡化
    Ptr<CLAHE> clahe = createCLAHE();
    clahe->setClipLimit(4); // 设置对比度限制
    Mat img_clahe;
    clahe->apply(img, img_clahe);

    // 显示原始图像、直方图均衡化后的图像和CLAHE后的图像
    imshow("原始图像", img);
    imshow("直方图均衡化后的图像", img_hist_equalized);
    imshow("CLAHE后的图像", img_clahe);

    // 进行目标检测
    CascadeClassifier face_cascade;
    if (!face_cascade.load("haarcascade_frontalface_alt.xml"))
    {
        cout << "无法加载分类器文件" << endl;
        return -1;
    }

    vector<Rect> faces;
    face_cascade.detectMultiScale(img_clahe, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));

    // 在图像中绘制检测到的人脸
    for (size_t i = 0; i < faces.size(); i++)
    {
        rectangle(img, faces[i], Scalar(255, 0, 0), 2);
    }

    // 显示检测结果
    imshow("检测结果", img);

    waitKey(0);

    return 0;
}

其中,使用了OpenCV的equalizeHist()函数进行直方图均衡化,以及createCLAHE()函数创建CLAHE对象进行自适应直方图均衡化。目标检测部分使用了OpenCV提供的Haar级联分类器

C++和opencv读取光照不均匀图像进行目标检测代码

原文地址: https://www.cveoy.top/t/topic/dngN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录