C++和opencv读取光照不均匀图像进行目标检测代码
以下是使用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级联分类器
原文地址: https://www.cveoy.top/t/topic/dngN 著作权归作者所有。请勿转载和采集!