- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Windows 7 中使用 OpenCV2.2。我想做的是使用以下代码检测另一个图像中定义的对象:
// Read the two image files
Mat image1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
Mat image2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
Mat finalImage = imread(argv[2]);
if( !image1.data || !image2.data ) {
std::cout << " --(!) Error reading images " << std::endl;
return -10;
}
//Construct the SURF Detector
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
//Extract the keypoints for each image
std::vector<KeyPoint> keypoints1, keypoints2;
detector.detect(image1,keypoints1);
detector.detect(image2,keypoints2);
//Calculate descriptors (feature vectors)
SurfDescriptorExtractor extractor;
Mat descriptors1, descriptors2;
extractor.compute(image1,keypoints1,descriptors1);
extractor.compute(image2,keypoints2,descriptors2);
//Define the Matcher
FlannBasedMatcher matcher;
std::cout << "matcher constructed!" << std::endl;
std::vector<vector<DMatch >> matches;
matcher.knnMatch(descriptors1, descriptors2, matches, 2);
std::cout << "matches: " << matches.size() << std::endl;
std::vector<DMatch > good_matches;
//THIS LOOP IS SENSITIVE TO SEGFAULTS
for (int i = 0; i < min(descriptors2.rows-1,(int) matches.size()); i++)
{
if((matches[i][0].distance < 0.8*(matches[i][1].distance)) && ((int) matches[i].size()<=2 && (int) matches[i].size()>0))
{
good_matches.push_back(matches[i][0]);
}
}
std::cout << "good_matches: " << good_matches.size() << std::endl;
VS2010 构建和编译代码没有错误。我的问题是,在某些(并非所有)情况下,当执行到行时
matcher.knnMatch(descriptors1, descriptors2, matches, 2);
cmd 停止并返回一条消息,例如:“断言失败(dataset.Type() == CvType(T)::type()
)在未知函数等中结束于 flann.hpp 第 105 行”
当图像之间没有相似性(并非所有情况)时,就会发生这种情况,尽管从两个图像中正确提取了描述符(匹配所需)。如果我使用 BruteForce 匹配器,代码工作正常。
我也试过 OpenCV 的代码:
http://opencv.itseez.com/doc/tutorials/features2d/feature_homography/feature_homography.html
遇到了同样的问题。即使我使用 Opencv 示例中的简单匹配器,执行也会失败。
std::vector< DMatch > matches;
matcher.match( descriptors_object, descriptors_scene, matches );
我搜索了解决方案(在 OpenCV flann.h assertion Error 上发现了一个类似的问题,但不幸的是没有答案)但我没有找到任何有用的东西。有谁知道如何解决这个问题吗?
最佳答案
这很奇怪,它在 this tutorial page 中拼接相同的代码...
也许您可以尝试使用 cv::DescriptorMatcher 接口(interface)(文档 here)。
用法是:
cv::DescriptorMatcher matcher = cv::DescriptorMatcher::create("FlannBased");
然后您可以直接在您的代码中使用它而无需任何更改。
关于opencv - FlannBased Matcher 断言失败错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11099672/
我在 Windows 7 中使用 OpenCV2.2。我想做的是使用以下代码检测另一个图像中定义的对象: // Read the two image files Mat image1 = imread
[要求您在将问题标记为重复或否决之前阅读问题详细信息。我已彻底搜索但找不到解决方案,因此将问题发布在这里。] 我正在尝试比较一张图片和多张图片并获取所有匹配图片的列表。我不想在图片之间绘制关键点。 我
我是一名优秀的程序员,十分优秀!