2014-01-29 3 views
4

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

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

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

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

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

Спасибо,

+0

Ссылка, которую вы указали, должна вызывать 'srand()' ** для примера реализации **, а не '' srand() 'инициализирует' randn() '* вообще *. К сожалению, он не говорит вам о гарантированном методе инициализации 'randn()'. –

ответ

12

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

cv::theRNG().state = seed; 

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

+0

Мой код не многопоточен. Достаточно ли использовать 'cv :: theRNG(). State = time (NULL);' в 'main'? Тогда можно ли генерировать случайные матрицы из других функций? Если это так, он не работает для 'randn'. – smttsp

+5

попробуйте cv :: getTickCount() вместо времени (NULL) – berak

Смежные вопросы