Кто-нибудь знает ссылку на реализацию BRIEF с OpenCV 2.4? С уважением.Внедрение BRIEF с OpenCV 2.4.10
PS: Я знаю, что такие вопросы, как правило, не приветствуются на SO, поскольку основное внимание уделяется тому, что вы сделали. Но был аналогичный question, который был довольно хорошо принят.
Один из ответов на эти вопросы предлагает общий способ для SIFT, который может быть расширен до КРАТКИЙ. Вот мой слегка измененный код.
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/highgui/highgui.hpp>
//using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
Mat image = imread("load02.jpg", CV_LOAD_IMAGE_GRAYSCALE);
cv::initModule_nonfree();
// Create smart pointer for SIFT feature detector.
Ptr<FeatureDetector> featureDetector = FeatureDetector::create("HARRIS"); // "BRIEF was initially written. Changed after answer."
vector<KeyPoint> keypoints;
// Detect the keypoints
featureDetector->detect(image, keypoints); // NOTE: featureDetector is a pointer hence the '->'.
//Similarly, we create a smart pointer to the SIFT extractor.
Ptr<DescriptorExtractor> featureExtractor = DescriptorExtractor::create("BRIEF");
// Compute the 128 dimension SIFT descriptor at each keypoint.
// Each row in "descriptors" correspond to the SIFT descriptor for each keypoint
Mat descriptors;
featureExtractor->compute(image, keypoints, descriptors);
// If you would like to draw the detected keypoint just to check
Mat outputImage;
Scalar keypointColor = Scalar(255, 0, 0); // Blue keypoints.
drawKeypoints(image, keypoints, outputImage, keypointColor, DrawMatchesFlags::DEFAULT);
namedWindow("Output");
imshow("Output", outputImage);
char c = ' ';
while ((c = waitKey(0)) != 'q'); // Keep window there until user presses 'q' to quit.
return 0;
}
Проблема с этим кодом является то, что он дает ошибку: First-chance exception at 0x00007FFB84698B9C in Project2.exe: Microsoft C++ exception: cv::Exception at memory location 0x00000071F4FBF8E0.
Результаты ошибок в преломлении выполнения функции. Тег говорит, что выполнение возобновится на линии namedWindow("Output");
.
Возможно, кто-то поможет устранить эту проблему или предложить новый код в целом? Благодарю.
EDIT: На терминале теперь отображается ошибка: Assertion failed (!outImage.empty()) in cv::drawKeypoints, file ..\..\..\..opencv\modules\features2d\src\draw.cpp, line 115
. Следующий оператор, из которого будет возобновлен код, останется таким же, как и drawKepoints
.
В какой строке вы узнали об ошибке? –
@Golazo: Мой плохой. Я отредактировал вопрос. – therainmaker