descriptorMatcher を機能させるのに本当に苦労しています。ビデオ フィードのすべてのフレームで探したいテンプレート イメージがあります。関連するコードは次のとおりです。
//the following is done once since the template is static:
templateImage = Utils.loadResource(mContext, R.raw.watch);
detector.detect(rgb, templateKeypoints);
Toast.makeText(mContext,"templateImage:" + templateImage.rows() + "/" + templateImage.cols() + " templateKeypoints:" + templateKeypoints.rows() + "/"
+ templateKeypoints.cols(), Toast.LENGTH_LONG).show();
descriptor.compute(rgb, templateKeypoints, templateDescriptors);
このトーストの結果は「templateImage:480/640 templateKeypoints:0/1」なので、キーポイントは 0 行 1 列です...
次に、すべてのフレームで次のコードが実行されます。
public Mat featureDetection(Mat inputImage) {
// first image
Mat descriptors1 = new Mat();
MatOfKeyPoint keypoints1 = new MatOfKeyPoint();
detector.detect(inputImage, keypoints1);
descriptor.compute(inputImage, keypoints1, descriptors1);
// second image - COVERED BY templateKeypoints, templateDescriptors
// detector.detect(img2, keypoints2);
// descriptor.compute(img2, keypoints2, descriptors2);
// detector.detect(templateImage, templateKeypoints);
// descriptor.compute(templateImage, templateKeypoints,
// templateDescriptors);
// matcher should include 2 different image's descriptors
Log.d(TAG, "descriptors1.type: " + descriptors1.type() + " / cols: " + descriptors1.cols());
Log.d(TAG, "templateDescriptors.type: " + templateDescriptors.type() + " / cols: " + templateDescriptors.cols());
matcher.match(descriptors1, templateDescriptors, matches);
// output image
Mat outputImg = new Mat();
MatOfByte drawnMatches = new MatOfByte();
// this will draw all matches, works fine
Features2d.drawMatches(inputImage, keypoints1, templateImage, templateKeypoints, matches, outputImg, GREEN, RED, drawnMatches,
Features2d.NOT_DRAW_SINGLE_POINTS);
return inputImage;
}
何かを返す前にクラッシュします。
(最初に結果を記録: )
04-27 23:04:53.011: D/FrameProcessing(2225): descriptors1.type: 0 / cols: 32
04-27 23:04:53.011: D/FrameProcessing(2225): templateDescriptors.type: 0 / cols: 0
04-27 23:04:53.011: E/cv::error()(2225): OpenCV Error: Assertion failed (type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U)) in void cv::batchDistance(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::OutputArray, int, int, cv::InputArray, int, bool), file /home/reports/ci/slave/50-SDK/opencv/modules/core/src/stat.cpp, line 1797
04-27 23:04:53.011: W/dalvikvm(2225): threadid=11: thread exiting with uncaught exception (group=0x413c9930)
04-27 23:04:53.018: E/AndroidRuntime(2225): FATAL EXCEPTION: Thread-207
04-27 23:04:53.018: E/AndroidRuntime(2225): CvException [org.opencv.core.CvException: /home/reports/ci/slave/50-SDK/opencv/modules/core/src/stat.cpp:1797: error: (-215) type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U) in function void cv::batchDistance(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::OutputArray, int, int, cv::InputArray, int, bool)
04-27 23:04:53.018: E/AndroidRuntime(2225): ]
04-27 23:04:53.018: E/AndroidRuntime(2225): at org.opencv.features2d.DescriptorMatcher.match_1(Native Method)
04-27 23:04:53.018: E/AndroidRuntime(2225): at org.opencv.features2d.DescriptorMatcher.match(DescriptorMatcher.java:437)
04-27 23:04:53.018: E/AndroidRuntime(2225): at com.bigsolve.frameprocessing.FrameProcessing.featureDetection(FrameProcessing.java:114)
tempateKeypoints
したがって、私と私の に大きな問題があるに違いないと思いますtemplateDescriptors
。
また、このエラーを回避したと仮定すると、 と は正確には何outImage
ですかdrawnMatches
? 640x480 のビデオ フィード ( の戻り値 mat ) のテンプレートに潜在的な一致をオーバーレイしたい場合、featureDetection
を返しoutImage
ますか?
ありがとう。