使用Opencv计算haar功能

时间:2015-04-19 12:17:04

标签: c++ opencv exception feature-extraction haar-classifier


我尝试使用opencv计算 Haar功能(给定图像) 输入:图片
输出: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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您的代码几乎是正确的。唯一缺失的是阅读之前训练过的CascadeClassifier。你可以这样做:

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

// 2)然后,创建一个FileNode来访问这些功能:

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

// 3)创建FeatureEvaluator,就像在第一行中那样创建

// 4)阅读您创建的FileNode:

ptrHaar->read(featuresNode);

并继续相应的代码。

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

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

int idx = 0;

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