From bc9be2f1086ecb5e9227e6cac846041d26b2e3eb Mon Sep 17 00:00:00 2001 From: Oskar Dahlberg Date: Mon, 22 Sep 2014 23:31:27 +0200 Subject: [PATCH] Fixed split not working --- src/Matrix.cc | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/Matrix.cc b/src/Matrix.cc index 25cb14a..d32ad0e 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -1687,25 +1687,31 @@ Matrix::CvtColor(const v8::Arguments& args) { // arrChannels = img.split(); Handle Matrix::Split(const v8::Arguments& args) { - HandleScope scope; + HandleScope scope; - Matrix * self = ObjectWrap::Unwrap(args.This()); + Matrix * self = ObjectWrap::Unwrap(args.This()); - vector channels; - cv::split(self->mat, channels); - unsigned int size = channels.size(); - v8::Local arrChannels = v8::Array::New(size); - for (unsigned int i = 0; i < size; i++) { - Local matObject = Matrix::constructor->GetFunction()->NewInstance(); - Matrix * m = ObjectWrap::Unwrap(matObject); - m->mat = channels[i]; - arrChannels->Set(i, matObject); - } + unsigned int size = self->mat.channels(); + vector channels; - return scope.Close(arrChannels); + // Split doesn't seem to work on empty vectors + for (int i = 0; i < size; i++) { + channels.push_back(cv::Mat()); + } + + cv::split(self->mat, channels); + + v8::Local arrChannels = v8::Array::New(size); + for (unsigned int i = 0; i < size; i++) { + Local matObject = Matrix::constructor->GetFunction()->NewInstance(); + Matrix * m = ObjectWrap::Unwrap(matObject); + m->mat = channels[i]; + arrChannels->Set(i, matObject); + } + + return scope.Close(arrChannels); } - // @author SergeMv // img.merge(arrChannels); Handle