OpenCV hat eine randn() Funktion und auch ein RNG zu erzeugen Klasse. Unten finden Sie den Matlab-Code, den Sie möglicherweise ersetzen möchten, und den entsprechenden OpenCV-Code.
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);
oder
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);
Intern OpenCV implementiert randn()
Verwendung RNG
. Der Nachteil bei der Verwendung von randn()
ist, dass Sie die Kontrolle über das Saatgut verlieren.
Wenn matrix2xN
oben mehr als einen Kanal hatte, wird für jeden Kanal ein anderer Mittelwert/Sigma verwendet. In diesem Fall müssten Sie die Anzahl der Zeilen (oder Spalten) in Mittelwert und Sigma erhöhen, um sie an die Anzahl der Kanäle in Matrix2xN anzupassen.
Danke für diese Antwort. +1. Als Nebenbemerkung scheint es im API-Design verschwenderisch zu sein, eine 'cv :: Mat' von nur einem Element anzugeben, um die mittlere oder Standardabweichung zu spezifizieren .... wäre kein Skalar oder 'cv :: Scalar' ist stattdessen besser geeignet? Seltsam. – rayryeng