C++ OpenCV 光照不均匀图像目标检测代码示例
#include <opencv2/opencv.hpp>
#include
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/kJmv 著作权归作者所有。请勿转载和采集!