4

私は、ORB 機能検出器、BRISK 機能記述子、およびブルート フォース マッチャーの組み合わせを使用して、Web カメラが提供するビデオ シーケンスを介して機能を検出、照合、および追跡しようとしている OpenCV プロジェクトに取り組んでいます。

現時点では、すべてが単一の画像に対して正常に機能しています。画面上の領域を強調表示し、ROI として抽出し、その特徴を検出して、ビデオの最初のフレームに戻すことができます。ただし、ビデオ シーケンスでこのプロセスを計算しようとすると、問題が発生します。

camera >> cameraFrame;
cv::cvtColor(cameraFrame, greyFrame, cv::COLOR_BGR2GRAY);

BriskMatching::briskMatcher.findFrameFeatures(greyFrame, mask);
BriskMatching::briskMatcher.computeFrameDescriptors(greyFrame);

        if(BriskMatching::briskMatcher.getFirstFrame())
        {
            BriskMatching::briskMatcher.findImgFeatures(imgToMatch_1C);
            BriskMatching::briskMatcher.setFirstFrame(false);
            clearMask.copyTo(mask);
            BriskMatching::briskMatcher.computeImgDescriptors(imgToMatch_1C);
        }
    }

    BriskMatching::briskMatcher.match();
    BriskMatching::briskMatcher.mMatches.clear(); 
    cv::drawMatches(imgToMatch_1C, BriskMatching::briskMatcher.mImgORBFeatures, greyFrame, BriskMatching::briskMatcher.mFrameORBFeatures, BriskMatching::briskMatcher.mMatches, matchesImg, cv::Scalar(255, 255, 255));
    cv::imshow("Matches", matchesImg);

を呼び出すと、実行時にプログラムがクラッシュしますBriskMatching::briskMatcher.match();が、それはプログラム ループの最初の繰り返しの後でのみです。以下は、briskMatcher.match()関数に含まれるコードです...

void BriskMatching::match()
{
    mBfMatcher.match(mImgDescriptors,mFrameDescriptors, mMatches);
}

これは、メモリ例外エラーと相まって、一致関数が使用しようとしてmMatchesいる3 つのコンテナーの 1 つに問題があると思われます。、ベクトルはクリアされていますが、実行時にクラッシュが発生します。std::vector<cv::KeyPoint>mMatches.clear();

クラッシュの原因について誰か洞察や提案がありますか? しばらくいじっていて、かなりイライラし始めています。

4

1 に答える 1