java opencv Features2d.drawMatches - ошибка подтверждения или исключение NullPointerException
Я пытаюсь создать изображение, отображающее совпадения ключевых точек в изображениях, созданных из просеивающих файлов, используя метод Features2d.drawMatches из java API openCV. Я не могу понять, какой аргумент метод примет в качестве выходного параметра - я получаю следующее сообщение об ошибке:
OpenCV(3.4.1) Error: Assertion failed (!outImage.empty()) in
cv::drawKeypoints, file C:\build\master_winpack-bindings-win32-vc14-
static\opencv\modules\features2d\src\draw.cpp, line 115
Exception in thread "main" CvException [org.opencv.core.CvException:
cv::Exception: OpenCV(3.4.1) C:\build\master_winpack-bindings-win32-vc14-
static\opencv\modules\features2d\src\draw.cpp:115: error: (-215)
!outImage.empty() in function cv::drawKeypoints
]
at org.opencv.features2d.Features2d.drawMatches_1(Native Method)
at org.opencv.features2d.Features2d.drawMatches(Features2d.java:71)
at com.company.GUI.ImagesView.matchPoints(ImagesView.java:94)
at com.company.GUI.ImagesView.<init>(ImagesView.java:69)
at com.company.Main.main(Main.java:17)
Мой код:
private void matchPoints() {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
MatOfKeyPoint matKey1 = new MatOfKeyPoint(keyPoints1);
MatOfKeyPoint matKey2 = new MatOfKeyPoint(keyPoints2);
MatOfDMatch matDMatch = new MatOfDMatch(matches);
Mat output = new Mat();
//output = new Mat(matKey1.rows(), matKey1.cols(), CvType.CV_8U, Scalar.all(0));
if (!output.empty())
System.out.println("not empty");
else
System.out.println("empty");
Features2d.drawMatches(mat1, matKey1, mat2, matKey2, matDMatch, output);
HighGui.imshow("Matches", output);
}
Точно такая же ошибка утверждения показывает, отменяю ли я комментарий к строке комментария, несмотря на приведенную ниже проверку empty(), возвращающую разные значения для этих двух матов. Я в недоумении, помощь будет высоко ценится.
0 ответов
Я не могу комментировать, поэтому должен написать ответ: у
меня была такая же проблема и я как-то ее решил. Это не ошибка зависимости - я решил ее, не меняя свои зависимости (или импортированные библиотеки).
Если совпадения вычислены правильно, при вызове этой функции не возникнет этой конкретной ошибки.
В моем коде ошибка заключалась в вызове функции вычисления. Я пытался вызвать эту функцию с помощью FastFeatureDetector, но где-то читал, что этот детектор не может найти никаких совпадений.
Попробуйте вычислить ORB extractor = ORB.create();
extractor.compute(currentFrame, keyPoints, imgDescriptor);
При попытке вычислить imgDescriptor ошибки не должно возникать; после сопоставления вы сможете нарисовать спички.
Надеюсь, я помог вам или кому-либо еще бороться с этой ошибкой.