我和Features2D +单应运行代码找到一个已知对象的教程,和我得到这个
OpenCV Error: Assertion failed (npoints >= 0 && points2.checkVector(2) == npoint
s && points1.type() == points2.type()) in unknown function, file c:Usersvpwor
kocvopencvmodulescalib3dsrcfundam.cpp, line 1062
运行错误。调试后,我发现程序崩溃在findHomography函数。
Unhandled exception at 0x760ab727 in OpenCVTemplateMatch.exe: Microsoft C++ exception: cv::Exception at memory location 0x0029eb3c..
在基于OpenCV的介绍,在“CV章说, 当前或未来的OpenCV外部可以与STL或其他库冲突。在这种情况下,使用明确的规范来解决冲突: 我改变了我的代码随处可见明确的规范,但问题并没有解决。如果可以的话 CodeGo.net,请在这个问题上,还是说这函数做的事情findHomography,并且不死机的程序。 这是我的代码
1. 今天我碰到这个例子代码中的问题。@数学咖啡是正确的没有特征提取,OBJ和场景是空的。我更换了测试图片和它的工作。从textures样式图像您不能提取SURF特征。 另一种方式是降低minHessianve.g。 `诠释minHessian=20; FAST的特征检测器通过改变几行:
//-- Step 1: Detect the keypoints using SURF Detector
int minHessian = 15;
FastFeatureDetector detector( minHessian );
2. 我有问题,我也跟着解决了MMH。只是写cv::Mat H = cv::findHomography( cv::Mat(obj), cv::Mat(scene), CV_RANSAC ); cv::perspectiveTransform( cv::Mat(obj_corners), cv::Mat(scene_corners), H);
解决了这个问题。
3. 实际的答案是内
npoints >= 0 && points2.checkVector(2) == npoints && points1.type() == points2.type()
人类可读的翻译,你必须实现这些assertions: 您的输入必须有点的正数(在实践中findHomography需要4个或更多个点)。 你的“对象”和点“杨继明'列表必须具有的点数。 你的“对象”和点“:杨继明,名单必须点的类型。
4. 你将不得不转换点,太你将它传递给findHomography()和perspectiveTransfor前
5. 更可能的是,问题就在这里:
if( matches[i].distance < 3*min_dist)
strict的不等式是不是你想要的。如果min_dist == 0
CodeGo.net,一个很不错的,你会不顾一切零距离点。替换为:
if( matches[i].distance <= 3*min_dist)
你应该看到的匹配以及良好的图像效果。 优雅地退出,我也想补充,例如:
if (good_matches.size() == 0)
{
std::cout<< " --(!) No good matches found " << std::endl; return -2;
}