OpenCV ma randn() funkcji, a także RNG klasa. Poniżej znajduje się kod Matlaba, który chcesz zastąpić, oraz równoważny kod OpenCV.
Matlab:
matrix2xN = randn(2,N)
OpenCV:
cv::Mat mean = cv::Mat::zeros(1,1,CV_64FC1);
cv::Mat sigma= cv::Mat::ones(1,1,CV_64FC1);
cv::RNG rng(optional_seed);
cv::Mat matrix2xN(2,N,CV_64FC1);
rng.fill(matrix2xN, cv::RNG::NORMAL, mean, sigma);
lub
cv::Mat mean = cv::Mat::zeros(1,1,CV_64FC1);
cv::Mat sigma= cv::Mat::ones(1,1,CV_64FC1);
cv::randn(matrix2xN, mean, sigma);
Wewnętrznie OpenCV realizuje randn()
pomocą RNG
. Wadą korzystania z randn()
jest utrata kontroli nad materiałem siewnym.
Jeżeli powyższy matrix2xN
ma więcej niż jeden kanał, to dla każdego kanału używana jest inna średnia/sigma. W takim przypadku musisz zwiększyć liczbę wierszy (lub col) w średniej i sigma, aby dopasować liczbę kanałów w matrix2xN.
Dzięki za tę odpowiedź. +1. Jako sidenote, wydaje się, marnotrawstwo w projekcie interfejsu API, aby musiała określić 'cv :: Mat' tylko jednego elementu w celu określenia średniej lub odchylenia standardowego .... nie byłaby skalarem, lub' cv :: Skalar jest bardziej odpowiedni? Dziwne. – rayryeng