【问题标题】:Using Opencv to calculate the haar feature使用Opencv计算haar特征
【发布时间】:2015-06-26 02:33:46
【问题描述】:


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

【问题讨论】:

  • 而异常信息是...?
  • FeatureExtract.exe 中 0x000007FEE8D2EF6C (opencv_objdetect249d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xFFFFFFFFFFFFFFFF。

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


【解决方案1】:

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

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

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

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

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

//4) 读取你创建的FileNode:

ptrHaar-&gt;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);
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 2017-08-08
      • 2010-12-23
      • 2014-05-02
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多