OpenCV 2.x/3.x 随机初始化矩阵
简介
在测试算法的时候,或者某些算法需要使用随机数,本文介绍如何使用OpenCV的随机数相关功能。
主要内容:
1. cv::RNG类 —— random number generator
2. cv::randu —— 填充均匀分布随机数
3. cv::randn —— 填充高斯分布随机数
cv::RNG
RNG是OpenCV用来产生随机数的类,他可以产生标量随机数,也可以使用随机数填充Mat对象。当前它只支持均匀分布和高斯分布的随机数。
用实例展示如何产生标量随机数和填充Mat对象。
例1,产生标量随机数。
#include <iostream>
#include <opencv2/opencv.hpp>
int main(){
cv::RNG rnger(cv::getTickCount());
for (int i = 0; i < 10; i++){
std::cout << "int uniform random number : " << rnger.uniform(0, 10) << std::endl;
std::cout << "float uniform random number : " << rnger.uniform(0.f, 1.f) << std::endl;
std::cout << "double uniform random number : " << rnger.uniform(0., 1.) << std::endl;
std::cout << "double gaussian random number : " << rnger.gaussian(1.) << std::endl;
std::cout << std::endl;
}
return 0;
}
例2,用随机数填充矩阵
#include <iostream>
#include <opencv2/opencv.hpp>
int main(){
cv::RNG rnger(cv::getTickCount());
int width = 1280, height = 720;
cv::Mat data;
cv::Scalar mm, ss;
// CV_8UC3 uniform distribution
data.create(height, width, CV_8UC3);
rnger.fill(data, cv::RNG::UNIFORM, cv::Scalar::all(0), cv::Scalar::all(256));
cv::imshow("data", data);
cv::waitKey();
// CV_8UC1 uniform distribution
data.create(height, width, CV_8UC1);
rnger.fill(data, cv::RNG::UNIFORM, cv::Scalar::all(0), cv::Scalar::all(256));
cv::imshow("data", data);
cv::waitKey();
// CV_32FC3 uniform distribution
data.create(height, width, CV_32FC3);
rnger.fill(data, cv::RNG::UNIFORM, cv::Scalar::all(0.), cv::Scalar::all(1.));
cv::imshow("data", data);
cv::waitKey();
// CV_32FC1 uniform distribution
data.create(height, width, CV_32FC1);
rnger.fill(data, cv::RNG::UNIFORM, cv::Scalar::all(0.), cv::Scalar::all(1.));
cv::imshow("data", data);
cv::waitKey();
// CV_32FC3 normal distribution
data.create(height, width, CV_32FC3);
rnger.fill(data, cv::RNG::NORMAL, cv::Scalar::all(0.), cv::Scalar::all(1.));
cv::meanStdDev(data, mm, ss);
std::cout << mm << ", " << ss << std::endl;
// CV_32FC1 normal distribution
data.create(height, width, CV_32FC1);
rnger.fill(data, cv::RNG::NORMAL, cv::Scalar::all(0.), cv::Scalar::all(1.));
cv::meanStdDev(data, mm, ss);
std::cout << mm << ", " << ss << std::endl;
return 0;
}
void RNG::fill(InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false );
mat :待填充的矩阵,他的内存必须已经分配!
distType :随机数的分布(cv::RNG::UNIFORM或者 cv::RNG::NORMAL)!
a :分布的第一个参数,如果distType=cv::RNG::UNIFORM,那a是均匀分布的下限。如果distType=cv::RNG::NORMAL 那么a 就是分布的均值。
b :分布的第二个参数,如果distType=cv::RNG::UNIFORM,那b 是均匀分布的上限(但不包括b)。如果distType=cv::RNG::NORMAL 那么b 就是分布的标准差。
randu,randn
randn和randu 可以用来替代 fill函数,唯一的区别是这两个函数使用默认的随机状态(state),而在使用fill的时候,我们用的是cv::getTickCount()来初始化随机状态的。
实例3,使用randu和randn
#include <iostream>
#include <opencv2/opencv.hpp>
int main(){
int width = 1280, height = 720;
cv::Mat data;
cv::Scalar mm, ss;
// CV_8UC3 uniform distribution
data.create(height, width, CV_8UC3);
cv::randu(data, cv::Scalar::all(0), cv::Scalar::all(256));
cv::imshow("data", data);
cv::waitKey();
// CV_8UC1 uniform distribution
data.create(height, width, CV_8UC1);
cv::randu(data, cv::Scalar::all(0), cv::Scalar::all(256));
cv::imshow("data", data);
cv::waitKey();
// CV_32FC3 uniform distribution
data.create(height, width, CV_32FC3);
cv::randu(data, cv::Scalar::all(0.), cv::Scalar::all(1.));
cv::imshow("data", data);
cv::waitKey();
// CV_32FC1 uniform distribution
data.create(height, width, CV_32FC1);
cv::randu(data, cv::Scalar::all(0.), cv::Scalar::all(1.));
cv::imshow("data", data);
cv::waitKey();
// CV_32FC3 normal distribution
data.create(height, width, CV_32FC3);
cv::randn(data, cv::Scalar::all(0.), cv::Scalar::all(1.));
cv::meanStdDev(data, mm, ss);
std::cout << mm << ", " << ss << std::endl;
// CV_32FC1 normal distribution
data.create(height, width, CV_32FC1);
cv::randn(data, cv::Scalar::all(0.), cv::Scalar::all(1.));
cv::meanStdDev(data, mm, ss);
std::cout << mm << ", " << ss << std::endl;
return 0;
}
OpenCV 2.x/3.x 随机初始化矩阵的更多相关文章
- [LeetCode] Random Flip Matrix 随机翻转矩阵
You are given the number of rows n_rows and number of columns n_cols of a 2D binary matrix where all ...
- ML(5)——神经网络3(随机初始化与梯度检验)
随机初始化 在线性回归和逻辑回归中,使用梯度下降法之前,将θ设置为0向量,有时会习惯性的将神经网络中的权重全部初始化为0,然而这在神经网络中并不适用. 以简单的三层神经网络为例,将全部权重都设置为0, ...
- Java实现 LeetCode 519 随机翻转矩阵
519. 随机翻转矩阵 题中给出一个 n 行 n 列的二维矩阵 (n_rows,n_cols),且所有值被初始化为 0.要求编写一个 flip 函数,均匀随机的将矩阵中的 0 变为 1,并返回该值的位 ...
- TensorFlow中权重的随机初始化
一开始没看懂stddev是什么参数,找了一下,在tensorflow/python/ops里有random_ops,其中是这么写的: def random_normal(shape, mean=0.0 ...
- [Swift]LeetCode519. 随机翻转矩阵 | Random Flip Matrix
You are given the number of rows n_rows and number of columns n_cols of a 2D binary matrix where all ...
- OpenCV仿射变换+投射变换+单应性矩阵
本来想用单应性求解小规模运动的物体的位移,但是后来发现即使是很微小的位移也会带来超级大的误差甚至错误求解,看起来这个方法各种行不通,还是要匹配知道深度了以后才能从三维仿射变换来入手了,纠结~ esti ...
- 吴恩达机器学习笔记47-K均值算法的优化目标、随机初始化与聚类数量的选择(Optimization Objective & Random Initialization & Choosing the Number of Clusters of K-Means Algorithm)
一.K均值算法的优化目标 K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此 K-均值的代价函数(又称畸变函数 Distortion function)为: 其中
- 阿基米德项目ALS矩阵分解算法应用案例
转自:https://github.com/ceys/jdml/wiki/ALS 阿基米德项目ALS矩阵分解算法应用案例 编写人:ceys/youyis 最后更新时间:2014.5.12 一.算法描述 ...
- 矩阵补全(Matrix Completion)和缺失值预处理
目录 1 常用的缺失值预处理方式 1.1 不处理 1.2 剔除 1.3 填充 2 利用矩阵分解补全缺失值 3 矩阵分解补全缺失值代码实现 4 通过矩阵分解补全矩阵的一些小问题 References 矩 ...
随机推荐
- MyBatis(三):数据库查询结果不为空,但是使用MyBatis框架查询为空问题
1.这个问题主要和返回字段是否和实体类javabean中的字段是否一致导致的问题. 解决方案: sql语句 : select account_id as "accountId" a ...
- 浅析开源数据库MySQL架构
数据库是所有应用系统的核心,故保证数据库稳定.高效.安全地运行是所有企业日常工作的重中之重.数据库系统一旦出现问题无法提供服务,有可能导致整个系统都无法继续工作.所以,一个成功的数据库架构在高可用设计 ...
- 【SQL.基础构建-第二节(2/4)】
-- Tips:查询基础 --一.SELECT 语句基础-- 1.查询指定列:SELECT 关键字--语法:--SELECT <列名>, ... -- 希望查询列的名称- ...
- Git -> Can't start Git: git.exe
问题描述 导入别人的PyCharm项目后提示:Can't start Git:git.exe 解决办法 Git就是个类似插件,在Git的官网上注册个账号然后每次编译就会自动把程序上传到网上备份.可以方 ...
- C# 获取字符串中的英文字母
string str20 = "ABC123"; string strSplit1,strSplit2; //取出字符串中所有的英文字母 strSplit1 = Regex.Rep ...
- github的简单使用
查了好多入门教程(图文并茂可以了解一些基本步骤),感觉逻辑欠缺,(很多东西跟着教程了解会用了,不了解逻辑,只是会了这一个,其他的还是很蒙),来一起理一理把 1.第一步下载并注册(这个自己解决) 2.用 ...
- Java基础知识回顾之四 ----- 集合List、Map和Set
前言 在上一篇中回顾了Java的三大特性:封装.继承和多态.本篇则来介绍下集合. 集合介绍 我们在进行Java程序开发的时候,除了最常用的基础数据类型和String对象外,也经常会用到集合相关类. 集 ...
- [Codeforces 863B]Kayaking
Description Vadim is really keen on travelling. Recently he heard about kayaking activity near his t ...
- ●BOZJ 4456 [Zjoi2016]旅行者
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4456 题解: 分治好题.大致做法如下:对于一开始的矩形区域,过较长边的中点把矩形区域分为两个 ...
- poj3270 && poj 1026(置换问题)
| 1 2 3 4 5 6 | | 3 6 5 1 4 2 | 在一个置换下,x1->x2,x2->x3,...,xn->x1, 每一个置换都可以唯一的分解为若干个不交的循环 如上面 ...