I have matrix that is the training data. The content of the data is point landmark. the data that save in rt matrix. then, I have new image from src matrix.
void mean(Mat src){
Mat rt, simpan, cascade;
Point pt=Point2f(x,y), sm;
FileStorage sv0("mall.txt", cv::FileStorage::READ);
mens = sv0["Point"];
read(mens,rt);
Mat img_1 = rt;
Mat img_2 = src;
//-- Step 1: Detect the keypoints using SURF Detector int minHessian = 400;
SurfFeatureDetector detector( minHessian );
std::vector<keypoint> keypoints_1, keypoints_2;
detector.detect( img_1, keypoints_1 ); detector.detect( img_2, keypoints_2 );
//-- Step 2: Calculate descriptors (feature vectors) SurfDescriptorExtractor extractor;
Mat descriptors_1, descriptors_2;
extractor.compute( img_1, keypoints_1, descriptors_1 ); extractor.compute( img_2, keypoints_2, descriptors_2 );
//-- Step 3: Matching descriptor vectors using FLANN matcher FlannBasedMatcher matcher; std::vector< DMatch > matches; matcher.match( descriptors_1, descriptors_2, matches );
double max_dist = 0; double min_dist = 100;
//-- Quick calculation of max and min distances between keypoints for( int i = 0; i < descriptors_1.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 );
std::vector< DMatch > good_matches;
for( int i = 0; i < descriptors_1.rows; i++ ) { if( matches[i].distance <= max(2*min_dist, 0.02) ) { good_matches.push_back( matches[i]); } }
//-- Draw only "good" matches Mat img_matches; drawMatches( img_1, keypoints_1, img_2, keypoints_2, good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
//-- Show detected matches imshow( "Good Matches", img_matches );
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 ); }
//imshow("Segmentasi",src);
}
I will track the new image with the training data, but the code was be break. this is the image
the data training is red color. and this is the error
OpenCV Error: Assertion failed (!img.empty() && img.depth() == CV_8U) in cv::SURF::operator (), file ........\opencv\modules\nonfree\src\surf.cpp,
thank you.