mirror of
https://github.com/peterbraden/node-opencv.git
synced 2025-12-08 19:45:55 +00:00
Merge pull request #604 from jake-brandt/floodfill-output-rect
Pass back Matrix.floodFill() output bounding rect (plus quick unit test)
This commit is contained in:
commit
97ceaaa4d6
@ -2599,6 +2599,19 @@ NAN_METHOD(Matrix::FloodFill) {
|
||||
setColor(obj->Get(Nan::New<String>("loDiff").ToLocalChecked())->ToObject()),
|
||||
setColor(obj->Get(Nan::New<String>("upDiff").ToLocalChecked())->ToObject()), 4);
|
||||
|
||||
// Documentation notes that parameter "rect" is an optional output
|
||||
// parameter which will hold the smallest possible bounding box of
|
||||
// affected pixels. If "rect" was provided, let's update the values.
|
||||
// (https://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html#floodfill)
|
||||
if (!obj->Get(Nan::New<String>("rect").ToLocalChecked())->IsUndefined()) {
|
||||
Local< Object > rectArgument =
|
||||
obj->Get(Nan::New<String>("rect").ToLocalChecked())->ToObject();
|
||||
rectArgument->Get(0)->ToObject()->Set(0, Nan::New<Number>(rect.x));
|
||||
rectArgument->Get(0)->ToObject()->Set(1, Nan::New<Number>(rect.y));
|
||||
rectArgument->Get(1)->ToObject()->Set(0, Nan::New<Number>(rect.width));
|
||||
rectArgument->Get(1)->ToObject()->Set(1, Nan::New<Number>(rect.height));
|
||||
}
|
||||
|
||||
info.GetReturnValue().Set(Nan::New<Number>(ret));
|
||||
}
|
||||
|
||||
|
||||
35
test/unit.js
35
test/unit.js
@ -552,5 +552,40 @@ test('toArray/fromArray working in both ways', function(assert) {
|
||||
});
|
||||
});
|
||||
|
||||
test('floodFill optional returned bounding rect', function(assert) {
|
||||
var cv = require('../lib/opencv');
|
||||
var solidImage = new cv.Matrix(
|
||||
10, 15, // Create 15px wide by 10px tall image
|
||||
cv.Constants.CV_8U);
|
||||
|
||||
// Define output rect
|
||||
var rect = [
|
||||
[0, 0], // x, y
|
||||
[0, 0] // width, height
|
||||
];
|
||||
|
||||
// Set all pixels to black/0
|
||||
for (var y=0; y<solidImage.height(); y++) {
|
||||
for (var x=0; x<solidImage.width(); x++) {
|
||||
solidImage.pixel(y, x, [0]);
|
||||
}
|
||||
}
|
||||
|
||||
// Fill entire image
|
||||
solidImage.floodFill({
|
||||
seedPoint: [3, 2], // x=2, y=3
|
||||
newColor: [128],
|
||||
rect,
|
||||
loDiff: 0,
|
||||
upDiff: 0
|
||||
});
|
||||
|
||||
assert.equal(rect[0][0], 0); // Expect fill to go all the way to left edge
|
||||
assert.equal(rect[0][1], 0); // Expect fill to go all the way to top edge
|
||||
assert.equal(rect[1][0], 15); // Expect fill to create 15px-wide bounding rect
|
||||
assert.equal(rect[1][1], 10); // Expect fill to create 10px-tall bounding rect
|
||||
assert.end();
|
||||
});
|
||||
|
||||
// Test the examples folder.
|
||||
require('./examples')()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user