123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- // This file is part of OpenCV project.
- // It is subject to the license terms in the LICENSE file found in the top-level directory
- // of this distribution and at http://opencv.org/license.html.
- if (typeof module !== 'undefined' && module.exports) {
- // The environment is Node.js
- var cv = require('./opencv.js'); // eslint-disable-line no-var
- }
- function generateTestFrame(width, height) {
- let w = width || 200;
- let h = height || 200;
- let img = new cv.Mat(h, w, cv.CV_8UC1, new cv.Scalar(0, 0, 0, 0));
- let s = new cv.Scalar(255, 255, 255, 255);
- let s128 = new cv.Scalar(128, 128, 128, 128);
- let rect = new cv.Rect(w / 4, h / 4, w / 2, h / 2);
- img.roi(rect).setTo(s);
- img.roi(new cv.Rect(w / 2 - w / 8, h / 2 - h / 8, w / 4, h / 4)).setTo(s128);
- cv.rectangle(img, new cv.Point(w / 8, h / 8), new cv.Point(w - w / 8, h - h / 8), s, 5);
- cv.rectangle(img, new cv.Point(w / 5, h / 5), new cv.Point(w - w / 5, h - h / 5), s128, 3);
- cv.line(img, new cv.Point(-w, 0), new cv.Point(w / 2, h / 2), s128, 5);
- cv.line(img, new cv.Point(2*w, 0), new cv.Point(w / 2, h / 2), s, 5);
- return img;
- }
- QUnit.module('Features2D', {});
- QUnit.test('Detectors', function(assert) {
- let image = generateTestFrame();
- let kp = new cv.KeyPointVector();
- let orb = new cv.ORB();
- orb.detect(image, kp);
- assert.equal(kp.size(), 67, 'ORB');
- let mser = new cv.MSER();
- mser.detect(image, kp);
- assert.equal(kp.size(), 7, 'MSER');
- let brisk = new cv.BRISK();
- brisk.detect(image, kp);
- assert.equal(kp.size(), 191, 'BRISK');
- let ffd = new cv.FastFeatureDetector();
- ffd.detect(image, kp);
- assert.equal(kp.size(), 12, 'FastFeatureDetector');
- let afd = new cv.AgastFeatureDetector();
- afd.detect(image, kp);
- assert.equal(kp.size(), 67, 'AgastFeatureDetector');
- let gftt = new cv.GFTTDetector();
- gftt.detect(image, kp);
- assert.equal(kp.size(), 168, 'GFTTDetector');
- let kaze = new cv.KAZE();
- kaze.detect(image, kp);
- assert.equal(kp.size(), 159, 'KAZE');
- let akaze = new cv.AKAZE();
- akaze.detect(image, kp);
- assert.equal(kp.size(), 53, 'AKAZE');
- });
- QUnit.test('BFMatcher', function(assert) {
- // Generate key points.
- let image = generateTestFrame();
- let kp = new cv.KeyPointVector();
- let descriptors = new cv.Mat();
- let orb = new cv.ORB();
- orb.detectAndCompute(image, new cv.Mat(), kp, descriptors);
- assert.equal(kp.size(), 67);
- // Run a matcher.
- let dm = new cv.DMatchVector();
- let matcher = new cv.BFMatcher();
- matcher.match(descriptors, descriptors, dm);
- assert.equal(dm.size(), 67);
- });
- QUnit.test('Drawing', function(assert) {
- // Generate key points.
- let image = generateTestFrame();
- let kp = new cv.KeyPointVector();
- let descriptors = new cv.Mat();
- let orb = new cv.ORB();
- orb.detectAndCompute(image, new cv.Mat(), kp, descriptors);
- assert.equal(kp.size(), 67);
- let dst = new cv.Mat();
- cv.drawKeypoints(image, kp, dst);
- assert.equal(dst.rows, image.rows);
- assert.equal(dst.cols, image.cols);
- // Run a matcher.
- let dm = new cv.DMatchVector();
- let matcher = new cv.BFMatcher();
- matcher.match(descriptors, descriptors, dm);
- assert.equal(dm.size(), 67);
- cv.drawMatches(image, kp, image, kp, dm, dst);
- assert.equal(dst.rows, image.rows);
- assert.equal(dst.cols, 2 * image.cols);
- dm = new cv.DMatchVectorVector();
- matcher.knnMatch(descriptors, descriptors, dm, 2);
- assert.equal(dm.size(), 67);
- cv.drawMatchesKnn(image, kp, image, kp, dm, dst);
- assert.equal(dst.rows, image.rows);
- assert.equal(dst.cols, 2 * image.cols);
- });
|