OpenCV có chức năng randn() và cũng là một RNG lớp học. Dưới đây là mã Matlab bạn có thể muốn thay thế và mã OpenCV tương đương.
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);
hoặc
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);
Bên trong, OpenCV thực hiện randn()
sử dụng RNG
. Những bất lợi nếu sử dụng randn()
là bạn mất quyền kiểm soát hạt giống.
Nếu matrix2xN
ở trên có nhiều kênh thì giá trị trung bình/sigma khác nhau được sử dụng cho mỗi kênh. Trong trường hợp đó, bạn sẽ cần phải bôi trơn số hàng (hoặc cols) trong trung bình và sigma để phù hợp với số kênh trong matrix2xN.
Cảm ơn câu trả lời này. +1. Là một sidenote, có vẻ như lãng phí trong thiết kế API phải chỉ định một 'cv :: Mat' của chỉ một phần tử để xác định độ lệch trung bình hoặc chuẩn .... sẽ không phải là vô hướng, hoặc' cv :: Scalar' có phù hợp hơn không? Kỳ dị. – rayryeng