Как запустить функцию randn opencv

Я хочу запустить функцию randn, но не могу этого сделать.

srand(time(NULL));
Mat mymat = Mat::zeroes(1024,1024,CV_32F);
randn(mymat,0,1); 

Не должен ли он дать мне случайный мат с именем mymat, чьи mean = 0 и variance = 1? Однако он дает одно и то же mymat при каждом запуске.

Вот ссылка для randn, которая утверждает, что srand работает.

Я пытался указать разные числа вместо времени (NULL), но все они имеют одинаковые выходные случайные значения. Я проверил то же самое на другой машине, она дает тот же результат на первой машине. Так что раздача не работает.

Спасибо,


person smttsp    schedule 29.01.2014    source источник
comment
В предоставленной вами ссылке говорится, что вы должны вызывать srand() для этого примера реализации, а не то, что srand() будет инициализировать randn() вообще. К сожалению, он не говорит вам о гарантированном методе инициализации randn().   -  person Toby Speight    schedule 10.10.2017


Ответы (1)


Вы можете установить начальное значение для функций OpenCV, используя следующий фрагмент:

cv::theRNG().state = seed;

Существует тонкость для многопоточных программ - OpenCV использует локальные генераторы случайных чисел потока, поэтому вам нужно (повторно) установить начальное число из того же потока.

person Andrey Kamaev    schedule 29.01.2014
comment
Мой код не является многопоточным. Достаточно ли использовать cv::theRNG().state = time(NULL); в функции main? Тогда я мог бы генерировать случайные матрицы из других функций? Если это так, это не работает для randn. - person smttsp; 29.01.2014
comment
попробуйте cv::getTickCount() вместо time(NULL) - person berak; 29.01.2014