我尝试使用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
答案 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);
}