gpt4 book ai didi

opencv - 使用 OpenCV 提取 HoG 特征

转载 作者:太空宇宙 更新时间:2023-11-03 20:36:44 25 4
gpt4 key购买 nike

我正在尝试使用 OpenCV 的 HoG API 提取特征,但是我似乎找不到允许我这样做的 API。

我想做的是使用 HoG 从我的所有数据集中提取特征(一定数量的正面和负面图像),然后训练我自己的 SVM。

我在 OpenCV 下查看了 HoG.cpp,但没有帮助。所有的代码都隐藏在复杂性和迎合不同硬件的需要中(例如英特尔的 IPP)

我的问题是:

  1. 是否有任何来自 OpenCV 的 API 可用于提取所有这些特征/描述符以输入 SVM?如果有,我该如何使用它来训练我自己的 SVM?
  2. 如果没有,是否有任何现有的库可以完成同样的事情?

到目前为止,我实际上是将一个现有的库 (http://hogprocessing.altervista.org/) 从 Processing (Java) 移植到 C++,但它仍然很慢,检测至少需要 16 秒

有没有其他人成功提取 HoG 特征,您是如何解决的?你有任何我可以使用的开源代码吗?

提前致谢

最佳答案

你可以在opencv中使用hog类,如下所示

HOGDescriptor hog;
vector<float> ders;
vector<Point> locs;

此函数为您计算 hog 特征

hog.compute(grayImg, ders, Size(32, 32), Size(0, 0), locs);

grayImg 计算的 HOG 特征存储在 ders 向量中,使其成为一个矩阵,以后可以用于训练。

Mat Hogfeat(ders.size(), 1, CV_32FC1);

for(int i=0;i<ders.size();i++)
Hogfeat.at<float>(i,0)=ders.at(i);

现在您的 HOG 特征存储在 Hogfeat 矩阵中。

您还可以使用对象 hog 设置窗口大小、单元格大小和 block 大小,如下所示:

hog.blockSize = 16;
hog.cellSize = 4;
hog.blockStride = 8;

// This is for comparing the HOG features of two images without using any SVM
// (It is not an efficient way but useful when you want to compare only few or two images)
// Simple distance
// Consider you have two HOG feature vectors for two images Hogfeat1 and Hogfeat2 and those are same size.

double distance = 0;
for(int i = 0; i < Hogfeat.rows; i++)
distance += abs(Hogfeat.at<float>(i, 0) - Hogfeat.at<float>(i, 0));

if (distance < Threshold)
cout<<"Two images are of same class"<<endl;
else
cout<<"Two images are of different class"<<endl;

希望有用:)

关于opencv - 使用 OpenCV 提取 HoG 特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11626140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com