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