使用 Opencv 计算 haar 特征

Using Opencv to calculate the haar feature

本文关键字:特征 haar 计算 Opencv 使用      更新时间:2023-10-16


我尝试使用opencv(给定图像)计算Haar特征
输入:图像
输出:哈尔功能
为此,我正在使用OpenCV的FeatureEvaluator。

但是当我尝试计算一个特征时,我遇到了一个例外。这是我的做法:

Ptr<FeatureEvaluator> ptrHaar = FeatureEvaluator::create(FeatureEvaluator::HAAR);
Mat img = imread(image_path);       // image of size 2048*1536 correctly loaded
ptrHaar->setImage(img, Size(100, 100));
ptrHaar->setWindow(Point(0, 0));
double res = ptrHaar->calcOrd(0);   // get the exception here
我认为

您需要加载/创建某种类型的 Haar 功能,而不仅仅是创建一个对象。尝试使用加载方法加载一些 Haar 级联分类器,而不是尝试使用 calcOrd 方法。

你的代码几乎是正确的。唯一缺少的是阅读以前训练的级联分类器。您可以按如下方式执行此操作:

FileStorage fs( "cascade.xml", FileStorage::READ );

/

/2)然后,创建一个文件节点来访问这些功能:

FileNode featuresNode = fs["cascade"]["features"];

/

/3)创建要素赋值器,就像在第一行中所做的那样

/

/4)读取您创建的文件节点:

ptrHaar->read(featuresNode);

并相应地继续您的代码。

请注意,ptrHaar->calcOrd(0) 将只读取第一个特征矩形,如果你有更多要阅读的内容,你将需要一个循环,如下所示:

FileNodeIterator it = featuresNode.begin(), it_end = featuresNode.end();

int idx = 0;
for( ; it != it_end; ==it, idx++ )
{
    res = ptrHaar.calcOrd(idx);
}