From 765ee8d68b87b63065a5e409103fb2f56a34db88 Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 4 May 2012 15:27:35 -0700 Subject: [PATCH] Fix Matrix::Row() and Matrix::Col() to return proper BGR pixel values for images --- src/Matrix.cc | 26 +++++++++++++++++--------- src/OpenCV.cc | 2 +- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Matrix.cc b/src/Matrix.cc index a747518..c12ebe1 100644 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -117,11 +117,15 @@ Matrix::Row(const Arguments& args){ SETUP_FUNCTION(Matrix) int width = self->mat.size().width; - int j = args[0]->IntegerValue(); - v8::Local arr = v8::Array::New(width); + int y = args[0]->IntegerValue(); + v8::Local arr = v8::Array::New(width * 3); - for (int i=0; iSet(i, Number::New(self->mat.at(i, j))); + for (int x=0; xmat.at(y, x); + int offset = x * 3; + arr->Set(offset , Number::New((double)pixel.val[0])); + arr->Set(offset + 1, Number::New((double)pixel.val[1])); + arr->Set(offset + 2, Number::New((double)pixel.val[2])); } return scope.Close(arr); } @@ -130,12 +134,16 @@ Handle Matrix::Col(const Arguments& args){ SETUP_FUNCTION(Matrix) - int width = self->mat.size().width; - int j = args[0]->IntegerValue(); - v8::Local arr = v8::Array::New(width); + int height = self->mat.size().height; + int x = args[0]->IntegerValue(); + v8::Local arr = v8::Array::New(height * 3); - for (int i=0; iSet(i, Number::New(self->mat.at(j, i))); + for (int y=0; ymat.at(y, x); + int offset = y * 3; + arr->Set(offset , Number::New((double)pixel.val[0])); + arr->Set(offset + 1, Number::New((double)pixel.val[1])); + arr->Set(offset + 2, Number::New((double)pixel.val[2])); } return scope.Close(arr); } diff --git a/src/OpenCV.cc b/src/OpenCV.cc index 9dd9ffe..241ff2a 100644 --- a/src/OpenCV.cc +++ b/src/OpenCV.cc @@ -39,7 +39,7 @@ OpenCV::ReadImage(const Arguments &args) { } else if (args[0]->IsString()) { std::string filename = std::string(*v8::String::AsciiValue(args[0]->ToString())); - mat = cv::imread(filename, -1); + mat = cv::imread(filename); } else if (Buffer::HasInstance(args[0])){ uint8_t *buf = (uint8_t *) Buffer::Data(args[0]->ToObject());