大佬教程收集整理的这篇文章主要介绍了c – OpenCV cv :: findHomography运行时错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
OpenCV Error: Assertion Failed (npoints >= 0 && points2.checkVector(2) == npoint s && points1.type() == points2.type()) in unkNown function,file c:\Users\vp\wor k\ocv\opencv\modules\calib3d\src\fundam.cpp,line 1062
运行时错误.调试后我发现程序在findHomography功能崩溃.
Unhandled exception at 0x760ab727 in OpenCVTemplateMatch.exe: Microsoft C++ exception: cv::Exception at memory LOCATIOn 0x0029eb3c..
在OpenCV的Introduction中,“cv命名空间”一章说
我改变了我的代码,并使用明确的命名空间说明符,但问题没有解决.如果可以,请帮我解决这个问题,或者说哪个功能和findHomography相同,不要崩溃程序.
这是我的代码
#include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/calib3d/calib3d.hpp" void readme(); /** @function main */ int main( int argc,char** argv ) { if( argc != 3 ) { readme(); return -1; } cv::Mat img_object = cv::imread( argv[1],CV_LOAD_IMAGE_GRAYSCALE ); cv::Mat img_scene = cv::imread( argv[2],CV_LOAD_IMAGE_GRAYSCALE ); if( !img_object.data || !img_scene.data ) { std::cout<< " --(!) Error reading images " << std::endl; return -1; } //-- Step 1: Detect the keypoints using SURF Detector int minHessian = 400; cv::SurfFeatureDetector detector( minHessian ); std::vector<cv::KeyPoint> keypoints_object,keypoints_scene; detector.detect( img_object,keypoints_object ); detector.detect( img_scene,keypoints_scene ); //-- Step 2: Calculate descriptors (feature vectors) cv::SurfDescriptorExtractor extractor; cv::Mat descriptors_object,descriptors_scene; extractor.compute( img_object,keypoints_object,descriptors_object ); extractor.compute( img_scene,keypoints_scene,descriptors_scene ); //-- Step 3: Matching descriptor vectors using FLAnn matcher cv::FlAnnBasedMatcher matcher; std::vector< cv::DMatch > matches; matcher.match( descriptors_object,descriptors_scene,matches ); double max_dist = 0; double min_dist = 100; //-- Quick calculation of max and min distances between keypoints for( int i = 0; i < descriptors_object.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 (i.e. whose distance is less than 3*min_dist ) std::vector< cv::DMatch > good_matches; for( int i = 0; i < descriptors_object.rows; i++ ) { if( matches[i].distance < 3*min_dist ) { good_matches.push_BACk( matches[i]); } } cv::Mat img_matches; cv::drawMatches( img_object,img_scene,good_matches,img_matches,cv::Scalar::all(-1),std::vector<char>(),cv::DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS ); //-- Localize the object std::vector<cv::Point2f> obj; std::vector<cv::Point2f> scene; for( int i = 0; i < good_matches.size(); i++ ) { //-- Get the keypoints from the good matches obj.push_BACk( keypoints_object[ good_matches[i].queryIdx ].pt ); scene.push_BACk( keypoints_scene[ good_matches[i].TrainIdx ].pt ); } cv::Mat H = cv::findHomography( obj,scene,CV_RANSAC ); //-- Get the corners from the image_1 ( the object to be "detected" ) std::vector<cv::Point2f> obj_corners(4); obj_corners[0] = cvPoint(0,0); obj_corners[1] = cvPoint( img_object.cols,0 ); obj_corners[2] = cvPoint( img_object.cols,img_object.rows ); obj_corners[3] = cvPoint( 0,img_object.rows ); std::vector<cv::Point2f> scene_corners(4); cv::perspectiveTransform( obj_corners,scene_corners,H); //-- Draw lines between the corners (the mapped object in the scene - image_2 ) cv::line( img_matches,scene_corners[0] + cv::Point2f( img_object.cols,0),scene_corners[1] + cv::Point2f( img_object.cols,cv::Scalar(0,255,4 ); cv::line( img_matches,scene_corners[2] + cv::Point2f( img_object.cols,cv::Scalar( 0,scene_corners[3] + cv::Point2f( img_object.cols,4 ); //-- Show detected matches cv::imshow( "Good Matches & Object detection",img_matches ); cv::waitKey(0); return 0; } /** @function readme */ void readme() { std::cout << " Usage: ./SURF_descriptor <img1> <img2>" << std::endl; }
以上是大佬教程为你收集整理的c – OpenCV cv :: findHomography运行时错误全部内容,希望文章能够帮你解决c – OpenCV cv :: findHomography运行时错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。