From 49d5cbbb6832dfaf1110d70f7a35097039dc9c27 Mon Sep 17 00:00:00 2001 From: Salman Date: Sun, 7 Sep 2014 13:41:26 +0500 Subject: [PATCH] added check for number of channels in fetching pixel value. Addresses issue #147 --- examples/convert_image.js | 2 ++ src/Matrix.cc | 32 ++++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/examples/convert_image.js b/examples/convert_image.js index eeb88da..0f130ae 100755 --- a/examples/convert_image.js +++ b/examples/convert_image.js @@ -9,6 +9,8 @@ cv.readImage("./mona.png", function(err, im) { img_hsv.convertHSVscale(); img_gray.convertGrayscale(); + console.log(img_gray.pixel(100,100)); + im.save("/tmp/nor.png"); img_hsv.save("/tmp/hsv.png"); img_gray.save("/tmp/gray.png"); diff --git a/src/Matrix.cc b/src/Matrix.cc index c94064f..6dc9ea6 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -212,19 +212,32 @@ Matrix::Pixel(const Arguments& args){ Local objColor = args[2]->ToObject(); - self->mat.at(y, x)[0] = (uchar) objColor->Get(0)->IntegerValue(); - self->mat.at(y, x)[1] = (uchar) objColor->Get(1)->IntegerValue(); - self->mat.at(y, x)[2] = (uchar) objColor->Get(2)->IntegerValue(); + if(self->mat.channels() == 3){ + self->mat.at(y, x)[0] = (uchar) objColor->Get(0)->IntegerValue(); + self->mat.at(y, x)[1] = (uchar) objColor->Get(1)->IntegerValue(); + self->mat.at(y, x)[2] = (uchar) objColor->Get(2)->IntegerValue(); + } + else if(self->mat.channels() == 1) + self->mat.at(y,x) = (uchar) objColor->Get(0)->IntegerValue(); + return scope.Close(args[2]->ToObject()); }else{ - cv::Vec3b intensity = self->mat.at(y, x); - v8::Local arr = v8::Array::New(3); - arr->Set(0, Number::New( intensity[0] )); - arr->Set(1, Number::New( intensity[1] )); - arr->Set(2, Number::New( intensity[2] )); - return scope.Close(arr); + if(self->mat.channels() == 3){ + cv::Vec3b intensity = self->mat.at(y, x); + v8::Local arr = v8::Array::New(3); + arr->Set(0, Number::New( intensity[0] )); + arr->Set(1, Number::New( intensity[1] )); + arr->Set(2, Number::New( intensity[2] )); + return scope.Close(arr); + } + else if(self->mat.channels() == 1){ + + uchar intensity = self->mat.at(y, x); + return scope.Close(Number::New(intensity)); + + } } return scope.Close(Undefined()); @@ -305,7 +318,6 @@ Matrix::Clone(const Arguments& args){ return scope.Close(im_h); } - Handle Matrix::Row(const Arguments& args){ SETUP_FUNCTION(Matrix)