ORB assertion failed with OpenCV 3.0.0 [closed]
Hi there, I'm trying to use ORB points of interest to try to retrieve an object into an image (compute points of interest; then associated descriptors and finally try to see if we can pair them and retrieve a transformation).
Here is a part of the code I use :
Ptr<cv::ORB> descriptor_ORB;
descriptor_ORB = cv::ORB::create(/*some values from a configuration file with atoi() and atof() to format values*/);
Mat model = imread(filename); //string filename -> the name of an image file
std::vector<KeyPoint> keypoints_model;
cout << "size model : " << model.cols << "\t" << models.rows << endl; //display 123 and 62 -> successfully load
Mat gray_model = model;
cvtColor(gray_model, gray_model, COLOR_BGR2GRAY); // convert to grayscale as in examples
descriptor_ORB -> detect (gray_model, keypoints_model); // compute ORB points of interest on grayscale image and put the points in the keypoints_model vector
This last line gives me an assertion failure :
OpenCV Error : Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x +roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat, file Matrix.cpp, line 499
Is it normal ? It is likely that the detect function is unable to retrieve any points of interest...
To avoid early, termination I put the detect call in a try/catch statement.
You have to create descriptor :
PS Please use icon 101010 to format your code
Yes, sorry, I forgot this line; I edited the post, I use some values from a configuration file to create the structure.
There is no problem with your program even with a flat image. Update to 3.2?
Why do I get the assertion then ? Are there any requirements on the value given to the ORB::create() function (like min/max boundary values) that would trigger the assertion ?
I tried your program with my first comment and an image size 123 cols and 62 rows. There is no exception. When I wrote this sample in opencv 3.0. No error canyou try this sample using this image ?
When using your code your image given twice (for both arguments); the execution reveals some assertion failure for different descriptors : for AKAZE-DESCRIPTOR_KAZE_UPRIGHT and the hamming distance; your usage of ORB seems ok though; my configuration given by ORB::create() is as follows :
the last 0 should be an index to something but I don't know which are available so... and my configuration leverage some assertion failure