codeboost / opencv-node

Use OpenCV with node.js
54 stars 9 forks source link

calculating histogramm #6

Open bitbay opened 11 years ago

bitbay commented 11 years ago

My next try was to add a @manual declaration to the legacy cv.mGet function, which is an INLINE declaration in opencv-src/modules/core/include/opencv2/core/types_c.h as:

CV_INLINE double cvmGet( const CvMat* mat, int row, int col ) { int type;

type = CV_MAT_TYPE(mat->type); assert( (unsigned)row < (unsigned)mat->rows && (unsigned)col < (unsigned)mat->cols );

if( type == CV32FC1 ) return ((float)(mat->data.ptr + (size_t)mat->step_row))[col]; else { assert( type == CV64FC1 ); return ((double)(mat->data.ptr + (size_t)mat->step_row))[col]; } }

my try on the bea declaration to expose the method in opencv_manual.cpp:

v8::Handlev8::Value JOpenCV::mGet(const v8::Arguments& args) { METHOD_BEGIN(1); //float mGet(const Mat* mat, int row, int col) //TODO: Enter code here cv::Mat* mat = bea::Convertcv::Mat*::FromJS(args[0], 0); int row = bea::Convert::FromJS(args[1], 1); int col = bea::Convert::FromJS(args[2], 2); THROW_IF_NOT(row > 0, "Invalid row value"); THROW_IF_NOT(col > 0, "Invalid col value");

// float or double?

float* ptr = (float_)(mat->data + (size_t)mat->step_row); // i get negative values too -> obviously wrong pointer/bad value for color... float result = ptr[col]; return bea::Convert::ToJS(result); METHOD_END(); }

(as You can see i'm still no good at all in CPP / v8)

What values use this v8 port for storing colors? Floats, doubles, uchars?

codeboost commented 11 years ago

cvmGet seems to be an older C-Style interface to opencv. If I'm not mistaken, you should use Mat::at to access individual elements of a matrix.

I'm currently working on calcHist and all the required dependencies, including the Mat::at() function and I should soon have an update ready.

codeboost commented 11 years ago

Just commited a new version of opencv-node, which includes cv.calcHist implementation and an example in the scripts directory. Let me know if that works for you