var vows = require('vows') , assert = require('assert') , fs = require('fs'); assertDeepSimilar = function(res, exp){ for (var i = 0; i < res.length; i++){ // res[i] = Math.round(res[i]/100)*100; } assert.deepEqual(res, exp) } assertWithinRange = function(res, exp, range){ assert.ok((res - exp) < range || (res - exp) > -range, "Not within range:" + res + " (" + exp + "+- " + range + ")") } assertWithinRanges = function(res, exp, range){ for (var i =0; i 100); } } , "detectObject": { topic : function(){ var cv = require('../lib/opencv') , cb = this.callback cv.readImage("./examples/mona.png", function(err, im){ im.detectObject(cv.FACE_CASCADE, {}, cb) }) } , "finds face": function(err, faces){ assert.isNull(err); assert.isArray(faces); assert.equal(faces.length, 1) } } , ".absDiff and .countNonZero" : function(cv) { cv.readImage("./examples/mona.png", function(err, im) { cv.readImage("./examples/mona.png", function(err, im2){ assert.ok(im); assert.ok(im2); var diff = new cv.Matrix(im.width(), im.height()); diff.absDiff(im, im2); diff.convertGrayscale(); assert.equal(diff.countNonZero(), 0); }); }); } , ".bitwiseXor" : function(cv) { var mat1 = new cv.Matrix(1,1); mat1.set(0,0, 1); var mat2 = new cv.Matrix(1,1); mat2.set(0,0, 1); var xored = new cv.Matrix(1,1); xored.bitwiseXor(mat1, mat2); assert.equal(xored.get(0,0), 0); } } , "Image" : { topic : require('../lib/opencv') , ".readImage from file": function(cv){ cv.readImage("./examples/mona.png", function(err, im){ assert.ok(im); assert.equal(im.width(), 500); assert.equal(im.height(), 756) assert.equal(im.empty(), false) }) } , ".readImage from buffer" : function(cv){ cv.readImage(fs.readFileSync('./examples/mona.png'), function(err, im){ assert.ok(im); assert.equal(im.width(), 500); assert.equal(im.height(), 756) assert.equal(im.empty(), false) }) } } , "CascadeClassifier": { topic : require('../lib/opencv') , "constructor" : function(cv){ assert.ok(new cv.CascadeClassifier("./data/haarcascade_frontalface_alt.xml")) } , "face detection": { topic : function(){ var cv = require('../lib/opencv') , self = this cv.readImage("./examples/mona.png", function(err, im){ cascade = new cv.CascadeClassifier("./data/haarcascade_frontalface_alt.xml"); cascade.detectMultiScale(im, self.callback)//, 1.1, 2, [30, 30]); }) } , "finds face": function(err, faces){ assert.isNull(err); assert.isArray(faces); assert.equal(faces.length, 1) } } } , "ImageDataStream" : { topic : require('../lib/opencv') , "pipe" : { topic : function(cv){ var s = new cv.ImageDataStream() , self = this s.on('load', function(im){ assert.ok(im) assert.equal(im.empty(), false); self.callback() }) fs.createReadStream('./examples/mona.png').pipe(s); } , "loaded" : function(im){ //assert.ok(im) //assert.equal(im.empty(), false); } } } , "ImageStream" :{ topic : require('../lib/opencv') , "write" : { topic: function(cv){ var s = new cv.ImageStream() , im = fs.readFileSync('./examples/mona.png') , self = this; s.on('data', function(m){ self.callback(null, m) }) s.write(im); } , "receives data" : function(mat){ assert.deepEqual(mat.size(), [756,500]) } } } , "ObjectDetectionStream" :{ topic : require('../lib/opencv') } , "CamShift" : { "Can Create and Track" : { topic : function(){ var cv = require('../lib/opencv') , self = this cv.readImage('./examples/coin1.jpg', function(e, im){ cv.readImage('./examples/coin2.jpg', function(e, im2){ self.callback(im, im2, cv) }) }) } , "create TrackedObject" : function(im, im2, cv){ var tracked = new cv.TrackedObject(im, [420, 110, 490, 170]); assert.ok(tracked); } , "use TrackedObject.track" : function(im, im2, cv){ var tracked = new cv.TrackedObject(im, [420, 110, 490, 170], {channel: 'v'}); assertWithinRanges(tracked.track(im2), [386, 112, 459, 166], 10); } } } , "putText": { topic: function() { var cv = require('../lib/opencv') , self = this cv.readImage('./examples/coin1.jpg', function(e, im){ self.callback(null, im); }); }, "fonts": function(im) { function rnd() { return Math.round(Math.random() * 255); }; var y = 0; ([ "HERSEY_SIMPLEX", "HERSEY_PLAIN", "HERSEY_DUPLEX", "HERSEY_COMPLEX", "HERSEY_TRIPLEX", "HERSEY_COMPLEX_SMALL", "HERSEY_SCRIPT_SIMPLEX", "HERSEY_SCRIPT_COMPLEX", "HERSEY_SCRIPT_SIMPLEX" ]).forEach(function(font) { im.putText("Some text", 0, y += 20, font, [rnd(), rnd(), rnd()]); }); im.save("./examples/coin1-with-text.jpg"); } } }).export(module);