我正在開發一個OpenCV項目,我嘗試使用ORB特徵檢測器,BRISK特徵描述符和Brute Force Matcher的組合來檢測,匹配和跟蹤特徵由我的攝像頭提供的視頻序列。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
這是一個std::vector<cv::KeyPoint>
我試圖通過在再次使用之前調用mMatches.clear();
來清除該向量,雖然向量被清除,但我仍然在運行時遇到崩潰。
有沒有人有任何見解或建議,可能會導致我的崩潰。一段時間以來,我一直在搞這個,現在開始變得非常沮喪。先謝謝了。
也許你顯示錯誤日誌? – McBodik