使用【c】写【HOG特征提取】的代码
时间: 2024-09-25 08:09:19 浏览: 53
hog特征提取,c版本代码
5星 · 资源好评率100%
霍夫(Histogram of Oriented Gradients, HOG)特征是一种广泛用于计算机视觉中的描述符,常用于行人检测等场景。在C语言中实现HOG特征提取通常涉及到OpenCV库,因为它提供了方便的接口和预计算的直方图模板。
以下是一个简单的HOG特征提取的步骤概述,具体的代码实现可能涉及头文件`<opencv2/objdetect.hpp>`和`<opencv2/imgproc.hpp>`:
```c
#include <opencv2/objdetect.hpp>
#include <opencv2/imgproc.hpp>
cv::Mat hogDescriptor(const cv::Mat& image, int blockSize, int cellSize, int numBins, bool computeGradient)
{
// 图像尺寸调整为满足HOG算法的要求
cv::Size winSize(blockSize, blockSize);
cv::Rect ROI(0, 0, image.cols - (blockSize - 1), image.rows - (blockSize - 1));
// 创建HOG描述符对象
cv::Ptr<cv::FeatureDetector> hog = cv::HOGDescriptor::create();
hog->setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());
// 设置参数
hog->setWinSize(winSize);
hog->setCellSize(cellSize);
hog->setBlockStride(cellSize);
hog->setHistNormType(cv::HOGDescriptor::L2Hys); // 均值标准化
hog->setNumBins(numBins);
// 提取特征
cv::Mat descriptors;
hog->compute(image(ROI), descriptors);
return descriptors;
}
```
这段代码定义了一个函数`hogDescriptor`,接受一个图像矩阵和几个HOG参数(如块大小、细胞大小、直方图bin数量),然后调用`cv::HOGDescriptor`的`compute`方法进行特征提取。
阅读全文