MCPcopy Create free account
hub / github.com/creatale/node-dv / fill

Method fill

deps/opencv/modules/core/src/rand.cpp:479–726  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

477};
478
479void RNG::fill( InputOutputArray _mat, int disttype,
480 InputArray _param1arg, InputArray _param2arg, bool saturateRange )
481{
482 Mat mat = _mat.getMat(), _param1 = _param1arg.getMat(), _param2 = _param2arg.getMat();
483 int depth = mat.depth(), cn = mat.channels();
484 AutoBuffer<double> _parambuf;
485 int j, k, fast_int_mode = 0, smallFlag = 1;
486 RandFunc func = 0;
487 RandnScaleFunc scaleFunc = 0;
488
489 CV_Assert(_param1.channels() == 1 && (_param1.rows == 1 || _param1.cols == 1) &&
490 (_param1.rows + _param1.cols - 1 == cn || _param1.rows + _param1.cols - 1 == 1 ||
491 (_param1.size() == Size(1, 4) && _param1.type() == CV_64F && cn <= 4)));
492 CV_Assert( _param2.channels() == 1 &&
493 (((_param2.rows == 1 || _param2.cols == 1) &&
494 (_param2.rows + _param2.cols - 1 == cn || _param2.rows + _param2.cols - 1 == 1 ||
495 (_param1.size() == Size(1, 4) && _param1.type() == CV_64F && cn <= 4))) ||
496 (_param2.rows == cn && _param2.cols == cn && disttype == NORMAL)));
497
498 Vec2i* ip = 0;
499 Vec2d* dp = 0;
500 Vec2f* fp = 0;
501 DivStruct* ds = 0;
502 uchar* mean = 0;
503 uchar* stddev = 0;
504 bool stdmtx = false;
505 int n1 = (int)_param1.total();
506 int n2 = (int)_param2.total();
507
508 if( disttype == UNIFORM )
509 {
510 _parambuf.allocate(cn*8 + n1 + n2);
511 double* parambuf = _parambuf;
512 double* p1 = (double*)_param1.data;
513 double* p2 = (double*)_param2.data;
514
515 if( !_param1.isContinuous() || _param1.type() != CV_64F || n1 != cn )
516 {
517 Mat tmp(_param1.size(), CV_64F, parambuf);
518 _param1.convertTo(tmp, CV_64F);
519 p1 = parambuf;
520 if( n1 < cn )
521 for( j = n1; j < cn; j++ )
522 p1[j] = p1[j-n1];
523 }
524
525 if( !_param2.isContinuous() || _param2.type() != CV_64F || n2 != cn )
526 {
527 Mat tmp(_param2.size(), CV_64F, parambuf + cn);
528 _param2.convertTo(tmp, CV_64F);
529 p2 = parambuf + cn;
530 if( n2 < cn )
531 for( j = n2; j < cn; j++ )
532 p2[j] = p2[j-n2];
533 }
534
535 if( depth <= CV_32S )
536 {

Callers 3

randuMethod · 0.45
randnMethod · 0.45
cvRandArrFunction · 0.45

Calls 15

SizeFunction · 0.85
cvCeilFunction · 0.85
cvFloorFunction · 0.85
randn_0_1_32fFunction · 0.85
minFunction · 0.70
maxFunction · 0.70
getMatMethod · 0.45
depthMethod · 0.45
channelsMethod · 0.45
sizeMethod · 0.45
typeMethod · 0.45
totalMethod · 0.45

Tested by

no test coverage detected