UNPKG

ojos

Version:

High level API on top of Mirada (opencv.js) supporting bth browser and node.

132 lines 5.22 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", { value: true }); var mirada_1 = require("mirada"); var misc_utils_of_mine_generic_1 = require("misc-utils-of-mine-generic"); var util_1 = require("../util"); var AbstractOperation = /** @class */ (function () { function AbstractOperation(defaultOptions) { this.defaultOptions = defaultOptions; this.description = 'TODO'; this.noInPlace = false; this.sameSizeAndType = false; this.isInPlace = false; this.noDst = false; this.validateEachExec = false; this.validated = false; this.validChannels = undefined; } AbstractOperation.prototype.validate = function (o) { return; }; AbstractOperation.prototype.exec = function (o) { var options = this.checkOptions(o); this.checkInPlaceBefore(options); if (!this.validated || this.validateEachExec) { var s = this.validate(options); if (s) { throw new Error(this.name + " validation error: " + s); } this.validated = true; } this._exec(options); this.checkInPlaceAfter(options); this.afterExec(options); return options.dst; }; AbstractOperation.prototype.afterExec = function (options) { }; AbstractOperation.prototype.checkInputImage = function (o) { }; AbstractOperation.prototype.checkOptions = function (o) { if (!o && !this.defaultOptions) { throw new Error('No options provided not in the constructor or in exec() call. Aborting.'); } Object.assign(o, this.defaultOptions, o); var options = o; this.checkInputImage(options); if (this.validChannels && this.validChannels.length && !this.validChannels.includes(options.src.channels())) { throw new Error("Invalid number of channels for input image which has " + options.src.channels() + " and must be in [" + this.validChannels.join(',') + "]"); } if (mirada_1.isSize(util_1.toSize(options.ksize))) { var ksize = util_1.toSize(options.ksize); ksize.width = ksize.width < 3 ? 3 : ksize.width % 2 !== 1 ? ksize.width - 1 : ksize.width; ksize.height = ksize.height < 3 ? 3 : ksize.height % 2 !== 1 ? ksize.height - 1 : ksize.height; } this.checkDst(options); return options; }; AbstractOperation.prototype.checkDst = function (options) { if (!options.dst) { if (this.noDst) { options.dst = options.src.clone(); } else if (this.sameSizeAndType) { options.dst = cv.Mat.zeros(options.src.rows, options.src.cols, options.src.type()); } else { options.dst = new cv.Mat(); } } else { if (this.noDst) { options.src.copyTo(options.dst); } } }; AbstractOperation.prototype.checkInPlaceBefore = function (o) { if (this.noInPlace && o.dst === o.src) { this.isInPlace = true; o.dst = o.src.clone(); } else { this.isInPlace = false; } }; AbstractOperation.prototype.checkInPlaceAfter = function (o) { if (this.isInPlace && this.noInPlace && o.dst) { this.isInPlace = false; o.dst.copyTo(o.src); misc_utils_of_mine_generic_1.checkThrow(o.dst !== o.src, 'Expected src and dst to be different objects'); o.dst.delete(); o.dst = o.src; } }; AbstractOperation.prototype.allChannels = function (o, op) { if (o.src.channels() === 1 || !o.channels) { op(o); } else { var rgbaPlanes_1 = new cv.MatVector(); cv.split(o.src, rgbaPlanes_1); var mats_1 = []; (Array.isArray(o.channels) ? o.channels : misc_utils_of_mine_generic_1.array(o.src.channels() === 4 ? 3 : o.src.channels())).forEach(function (i) { var M = rgbaPlanes_1.get(i); mats_1.push(M); op(__assign(__assign({}, o), { src: M, dst: M })); }); cv.merge(rgbaPlanes_1, o.dst); mirada_1.del.apply(void 0, __spreadArrays(mats_1, [rgbaPlanes_1])); } }; return AbstractOperation; }()); exports.AbstractOperation = AbstractOperation; //# sourceMappingURL=abstractOperation.js.map