我正在开发一个 OpenCV 项目,我正在尝试结合使用 ORB 特征检测器、BRISK 特征描述符和蛮力匹配器,通过我的网络摄像头提供的视频序列来检测、匹配和跟踪特征。
目前,单张图片一切正常。我可以突出显示屏幕上的一个区域,将其提取为 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);
}
这与我得到的内存异常错误相结合,使我相信 match 函数尝试使用的三个容器之一存在问题,主要mMatches
是std::vector<cv::KeyPoint>
我尝试在mMatches.clear();
再次使用之前通过调用来清除向量,虽然矢量被清除,但我仍然在运行时崩溃。
有没有人对可能导致我崩溃的原因有任何见解或建议?我已经搞砸了一段时间了,它开始变得非常令人沮丧。