OpenCV Advent Calendar 2015 26日目

はじめに

乱数をOpenCV内で使う場面

RNG の実装を見てみよう

一様分布

const uint64 initState = 0x1234354435;

int main() {

	using namespace cv;
	using namespace std;
	RNG a(initState);
	for(int i = 0;i < 10;i++)
	{
		unsigned int randomNumber = a.next();
		cout << "0x" << std::hex << std::setw(8) << std::setfill('0') << randomNumber << endl;
	}
	return 0;

} }}

正規分布

void checkEachBitVarianceGaussian(uint64 init, unsigned int iteration) {

	using namespace cv;
	RNG a(init);
	double foo = a.gaussian(kSigma);
	int64 start = cv::getTickCount();
	for(unsigned int i = 0;i < iteration;i++)
	{
		a.gaussian(kSigma);
	}
	int64 finish = getTickCount();
	foo = a.gaussian(kSigma);
	std::cout << (finish - start) * second2ms / getTickFrequency() << "ms for generating " << cIteration << " gaussian distributed random #" << std::endl;
	std::cout << ((finish - start) * second2ms / getTickFrequency()  / cIteration) << "ms / 1 random #" << std::endl;
	std::cout << foo << std::endl;

} }}

OpenCV内での本来の使い方

   Mat m(size0, type);
   rng.fill(m, RNG::UNIFORM, minVal, maxVal); // ここで配列mを乱数で埋める
   if( size0 == size )
       return m;
   return m(Rect((size0.width-size.width)/2, (size0.height-size.height)/2, size.width, size.height));

} }}

終わりに

補足情報

OpenCV Advent Calendar 2015 16日目 :OpenCV :OpenCV 3.1


添付ファイル: filerng-gaussian.png 941件 [詳細] filerng-uniform.png 998件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-25 (金) 21:44:52