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