Open bitbay opened 11 years ago
cvmGet seems to be an older C-Style interface to opencv.
If I'm not mistaken, you should use Mat::at
I'm currently working on calcHist and all the required dependencies, including the Mat::at() function and I should soon have an update ready.
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
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?