gpt4 book ai didi

opencv - Breif 错误,Brisk 描述符 opencv

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:13 25 4
gpt4 key购买 nike

我在打开的简历中使用 BREIF 描述符时遇到错误。错误是 BREIF 无法给出所有关键点的描述符。它给出的关键点数量少于预期的描述符。我得到的错误如下。错误仅使用 breif 描述符。使用 SURF 和 SURF 描述符没有错误

OpenCV 错误:断言失败(masks[i].rows == queryDescriptorsCount && masks[i].cols == trainDescCollection[i].rows && masks[i].type() == CV_8UC1)在 checkMasks,文件/home/shashank/Desktop/opencv-2.4.5/modules/features2d/src/matchers.cpp,第 259 行在抛出“cv::Exception”实例后调用终止 什么():/home/shashank/Desktop/opencv-2.4.5/modules/features2d/src/matchers.cpp:259:错误:(-215)masks[i].rows == queryDescriptorsCount && masks[i]。 cols == trainDescCollection[i].rows && masks[i].type() == CV_8UC1 函数 checkMasks

进一步询问我们得到
上一张图片的关键点编号 957下一幅图像中的关键点编号 910简短描述符的大小 32X880。应该是32X957简短描述符的大小 32X847。应该是32X910掩码 [910 x 957]

代码如下

     cv::Ptr<FeatureDetector> detector=new GridAdaptedFeatureDetector(new SurfAdjuster(),keypt,noofbucketinwidth,noofbucketinlength);//surf


//cv::Ptr<FeatureDetector> detector=new GridAdaptedFeatureDetector(new FastAdjuster(10,true),keypt,noofbucketinwidth,noofbucketinlength); //FAST

detector->detect(img,keypointimage);
cout<<"noof keypoint "<<keypointimage.size()<<endl;


//for descriptor
Mat descriptor;
Ptr<DescriptorExtractor> extractdetector=DescriptorExtractor::create("SURF");
Ptr<DescriptorExtractor> extractdetector=DescriptorExtractor::create("BRIEF");
extractdetector->compute( img, detectedpoint, descriptor);

//for matching
if(FAST_H_prev.empty())
FAST_H_prev = Mat::eye(3,3,CV_32FC1);

std::vector<unsigned char> FAST_match_mask;

if(!currentimagekeypoint.empty())
{
std::vector<cv::KeyPoint> test_kpts;
warpKeypoints(FAST_H_prev.inv(), nextimagekeypoint, test_kpts);

cv::Mat FAST_mask = windowedMatchingMask( test_kpts, currentimagekeypoint, 25, 25);
matcher->match(Discriptorofnextimage,Discriptorofcurrentimage, FAST_matches, FAST_mask);
matches2points(currentimagekeypoint, nextimagekeypoint, FAST_matches, FAST_train_pts, FAST_query_pts);
if(FAST_matches.size() > 5)
{
cv::Mat H = findHomography(FAST_train_pts, FAST_query_pts, RANSAC, 4, FAST_match_mask);
if(countNonZero(Mat(FAST_match_mask)) > 15)
FAST_H_prev = H;
else
FAST_H_prev = Mat::eye(3,3,CV_32FC1);
drawMatchesRelative(currentimagekeypoint, nextimagekeypoint, FAST_matches, currentimage, FAST_match_mask);

}
}
else
{
FAST_H_prev = Mat::eye(3,3,CV_32FC1);
}

最佳答案

在 OpenCV 实现中,Breif 描述符移除了离边界太近的关键点。

//Remove keypoints very close to the border
KeyPointsFilter::runByImageBorder(keypoints, image.size(), PATCH_SIZE/2 + KERNEL_SIZE/2);

解决方案可能是过滤代码中的关键点,然后提取描述符。

关于opencv - Breif 错误,Brisk 描述符 opencv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28559550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com