在瞭解OpenCV如何產生亂數之後,接下來實做產生亂數影像 (Generate Random Number for Image)。
OpenCV中提供兩種隨機亂數分佈:常態分佈(Normal Distribution)與均勻分佈(Uniform Distribution),來看看產生的影像有何差異。
程式碼
/**
Theme: Generate Random Number for Image
Compiler: Dev C++ 4.9.9.2
Library: OpenCV 2.0
Date: 101/10/21
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
#include <cv.h>
#include <highgui.h>
int main()
{
IplImage *Image1, *Image2;
CvSize ImageSize1 = cvSize(500,500);
Image1 = cvCreateImage(ImageSize1,IPL_DEPTH_8U,3);
cvZero(Image1);
Image2 = cvCloneImage(Image1);
CvRNG rng = cvRNG(cvGetTickCount());
int RandType1 = CV_RAND_UNI;
int RandType2 = CV_RAND_NORMAL;
CvScalar UniformLowBound = cvScalar(0,0,0,0);
CvScalar UniformUpBound = cvScalar(255,255,255,0);
cvRandArr(&rng,Image1,RandType1,UniformLowBound,UniformUpBound);
CvScalar NormalMean = cvScalar(127,127,127,0);
CvScalar NormalStandard = cvScalar(32,32,32,0);
cvRandArr(&rng,Image2,RandType2,NormalMean,NormalStandard);
cvNamedWindow("Random Uniform Distribution",1);
cvShowImage("Random Uniform Distribution",Image1);
cvNamedWindow("Random Normal Distribution",1);
cvShowImage("Random Normal Distribution",Image2);
cvWaitKey(0);
}
執行結果


這兩個影像看起來相當有趣,很像類比電視沒有訊號時的狀況。
函式用法
cvRandArr(CvRNG資料結構,IplImage或CvMat資料結構,均勻分佈參數,隨機範圍下限,隨機範圍上限)
cvRandArr(CvRNG資料結構,IplImage或CvMat資料結構,常態分佈參數,平均數,標準差)
矩陣(CvMat)或圖形(IplImage)隨機產生顏色。
參考:OpenCV隨機的實作-隨機分佈的種類、WiKi – Uniform distribution (continuous)、WiKi – Uniform distribution (discrete)、WiKi – Normal distribution。
Comments on: "[OpenCV] 產生亂數影像 (Generate Random Number for Image)" (1)
[…] 均勻分佈參數和常態分佈參數可參考:產生亂數影像 (Generate Random Number for Image)。 […]
讚讚