- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的代码包含一个部分,我在其中对一组匹配项进行排序,并根据距离定义良好的匹配项。当我尝试 drawMatches 时,我收到一个错误:
OpenCV Error: Assertion failed (i1 >= 0 && i1 < static_cast<int>(keypoints1.size())) in drawMatches, file /home/user/OpenCV/opencv-2.4.10/modules/features2d/src/draw.cpp, line 207
terminate called after throwing an instance of 'cv::Exception'
what(): /home/user/OpenCV/opencv-2.4.10/modules/features2d/src/draw.cpp:207: error: (-215) i1 >= 0 && i1 < static_cast<int>(keypoints1.size()) in function drawMatches
draw.cpp文件显示:
// draw matches
for( size_t m = 0; m < matches1to2.size(); m++ )
{
if( matchesMask.empty() || matchesMask[m] )
{
int i1 = matches1to2[m].queryIdx;
int i2 = matches1to2[m].trainIdx;
CV_Assert(i1 >= 0 && i1 < static_cast<int>(keypoints1.size()));
CV_Assert(i2 >= 0 && i2 < static_cast<int>(keypoints2.size()));
const KeyPoint &kp1 = keypoints1[i1], &kp2 = keypoints2[i2];
_drawMatch( outImg, outImg1, outImg2, kp1, kp2, matchColor, flags );
}
}
我的 drawMatches 调用如下:
Mat matchesImage;
drawMatches( im1, keypoints1, im2, keypoints2,
good_matches, matchesImage, Scalar::all(-1), Scalar::all(-1),
vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
谁能帮我解释一下这个错误?
更新:
这是我的 good_matches 计算代码
double min_dist = 10000;
double max_dist = 0;
//-- Quick calculation of max and min distances between keypoints
for( int i = 0; i < descriptors1.rows; i++ ) {
double dist = matches[i].distance;
if( dist < min_dist ) min_dist = dist;
if( dist > max_dist ) max_dist = dist;
}
printf("-- Max dist : %f \n", max_dist );
printf("-- Min dist : %f \n", min_dist );
//-- Draw only "good" matches
std::vector< DMatch > good_matches;
for( int i = 0; i < descriptors1.rows; i++ ) {
if( matches[i].distance <= max(2*min_dist, 0.02) ) {
good_matches.push_back( matches[i]);
}
}
for( int i = 0; i < (int)good_matches.size(); i++ ) {
printf( "-- Good Match [%d] Keypoint 1: %d -- Keypoint 2: %d \n",
i, good_matches[i].queryIdx, good_matches[i].trainIdx );
}
cout << "number of good matches: " << (int)good_matches.size() << endl;;
//Draw matches and save file
Mat matchesImage;
drawMatches( im1, keypoints1, im2, keypoints2,
good_matches, matchesImage, Scalar::all(-1), Scalar::all(-1),
vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
更新 2:
BFMatcher matcher(NORM_L2, true);
vector<DMatch> matches;
matcher.match(descriptors1, descriptors2, matches);
最佳答案
问题与您匹配点的顺序有关。如果你这样做了,例如:
match(right_desc, left_desc)
函数 drawMatches
必须遵循相同的顺序。这将起作用(考虑我的匹配示例):
drawMatches(right_rgb, right_pts, left_rgb, left_pts, matches)
这将产生您遇到的错误:
drawMatches(left_rgb, left_pts, right_rgb, right_pts, matches)
当您访问匹配的坐标时,顺序也会影响什么是查询和什么是训练(即 queryIdx
和 trainIdx
)。注意right_pts
和left_pts
分别是right_desc
和left_desc
描述的关键点。
希望对大家有帮助。
关于c++ - OpenCV drawMatches 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28725273/
我正在尝试在 2 张图片上找到匹配的兴趣点。这个项目的最后是建立全景图。 我有这个代码 SIFT detector(0); src1 = imread( folder + inputName1 , 1
imageCorrespondence = cv2.drawMatches(imageLeft, kpLeft, imageRight, kpRight, [goodMatches[0]], None
我通过在 features2d 框架中使用不同的检测器从两个连续的特征点中获得了特征点: 在第一帧中,特征点被绘制成红色 在下一帧中,特征点绘制为蓝色 我想在第一帧内(带红点的图像)这些红色和蓝色(匹
我的代码包含一个部分,我在其中对一组匹配项进行排序,并根据距离定义良好的匹配项。当我尝试 drawMatches 时,我收到一个错误: OpenCV Error: Assertion failed (
我知道drawMatches函数不会显示其matchs1to2参数的所有匹配项。这是基于其其他参数和标志(例如“不显示单行”)。我想知道是否有任何方法可以访问数组格式(例如DMatch结构)的输出匹配
当我尝试执行以下操作时: cv2.drawMatches(img1, keypoints1, img2, keypoints2, 匹配, 无, matchColor=(0,255,0), single
我是 OpenCV 的新手。我正在尝试在 iOS 上的 OpenCV 中使用 FLANN/SURF 在图像之间绘制特征匹配。我正在关注这个例子: http://docs.opencv.org/doc/
我试图显示两个图像之间的匹配关键点(一个是从我的相机捕获的,另一个是从数据库捕获的) 任何人都可以帮助我在我的代码中编写 DrawMatches 函数以显示 2 个图像之间的匹配线。 这是我的代码:
我只是在 OpenCV 中做一个特征检测的例子。这个例子如下所示。它给了我以下错误 module' 对象没有属性 'drawMatches' 我已经检查了 OpenCV 文档,但不确定为什么会出现此错
我正在尝试检测视频中的对象。我使用 SURF 作为特征检测和描述符提取器,使用 BRUTFORCE 作为匹配器。我用面孔测试了我的工作,我拍了一张我的照片,当我运行相机并将其对准我时,我的脸被检测到并
不画火柴。 Opencv 3.0,完全更新的 Ubuntu。代码运行但未显示任何匹配项。测试区域直接从图像中剪切和复制以进行匹配。 import numpy as np import cv2 cv2.
这是 OpenCV 的 drawMatches() 功能: void drawMatches(Mat img1, vector keypoints1, Mat img
我写了一段代码,它通过 KNN 算法找到 K 个最接近的匹配项。在获得 matMatch 和 matchIndices 之后,我尝试在两个结果帧之间绘制匹配对。 我将 matMask 和 ma
我使用 Sift/Surf 和 ORB,但有时我会遇到 drawMatch 函数的问题。 错误在这里: OpenCV Error: Assertion failed (i2 >= 0 && i2 =
关闭。这个问题需要debugging details .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 4年前关闭。 Improve this question 我有
我是一名优秀的程序员,十分优秀!