私は、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();
クラッシュの原因について誰か洞察や提案がありますか? しばらくいじっていて、かなりイライラし始めています。