【OpenCV 例程 300篇】257.OpenCV 生成随机矩阵

这篇具有很好参考价值的文章主要介绍了【OpenCV 例程 300篇】257.OpenCV 生成随机矩阵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

『youcans 的 OpenCV 例程300篇 - 总目录』


【youcans 的 OpenCV 例程 300篇】257. OpenCV 生成随机矩阵


3.2 OpenCV 创建随机图像

OpenCV 中提供了 cv.randncv.randu 函数生成随机数矩阵,也可以用于创建随机图像。

函数 cv.randn 生成的矩阵服从正态分布,函数 cv.randu 生成的矩阵服从均匀分布

函数说明:

cv.randn(dst, mean, stddev[, ]) → dst,生成正态分布矩阵

cv.randu(dst, low, high [, ]) → dst,生成均匀分布矩阵

cv.randShuffle(dst[, iterFactor=1.]) → dst,随机打乱一维数组 dst 的数组元素

参数说明:

  • dst:输入/输出数组,定义多维数组的形状,通道数 1~4
  • mean:生成正态分布矩阵的均值
  • stddev:生成正态分布矩阵的标准差,向量或方阵
  • low:生成均匀分布矩阵的最小值(lower boundary),包括 low
  • high:生成均匀分布矩阵的上限值(upper boundary),不包括 high
  • iterFactor:随机交换次数的比例

注意事项:

  1. 使用 cv.randncv.randu 函数,要预先定义 Numpy 数组 dst 。
  2. 当定义的 dst 为单通道时,参数 mean、stddev、low、high 是标量;当 dst 为多通道(如 3通道或4 通道时),参数 mean、stddev、low、high 是数组,数组长度等于通道数,数组的数据结构是列表或元组。
  3. 使用 cv.randu 函数生成均匀分布的随机数,随机数的取值范围是 [low, high)。

基本例程:

    # 1.14+ OpenCV 创建随机图像
    import cv2 as cv
    # (1) 通过宽度高度值创建多维数组
    h, w, ch = 20, 30, 3  # 行/高度, 列/宽度, 通道数
    imgEmpty = np.empty((h, w, ch), np.uint8)  # 创建空白数组
    imgBlack = np.zeros((h, w, ch), np.uint8)  # 创建黑色图像 RGB=0
    imgWhite = np.ones((h, w, ch), np.uint8) * 255  # 创建白色图像 RGB=255
    # (2) 通过 OpenCV 函数生成随机数矩阵
    img = np.empty((20, 30), np.uint8)
    imgRandN = cv.randn(img, mean=128, stddev=64)  # 正态分布 randn
    print(imgRandN.min(), imgRandN.max(), imgRandN.mean())  # 0~255
    img = np.empty((20, 30), np.uint8)
    imgRandU = cv.randu(img, low=1, high=10)  # 均匀分布 randu,[low, high)
    print(imgRandU.min(), imgRandU.max(), imgRandU.mean())  # 1~9
    # (3) 矩阵转向量
    dst1 = cv.reduce(imgRandU, 0, cv.REDUCE_AVG)
    dst2 = cv.reduce(imgRandU, 0, cv.REDUCE_MAX)
    dst3 = cv.reduce(imgRandU, 0, cv.REDUCE_MIN)
    print(dst1.shape, dst2.shape, dst3.shape)  # (1, 30) (1, 30) (1, 30)
    print(dst1)  # [[5 4 5 5 5 6 5 5 6 4 5 4 5 5 5 6 5 5 6 5 5 5 5 4 4 5 5 5 5 6]]
    print(dst2)  # [[9 8 9 9 9 9 9 9 9 8 9 9 8 9 9 9 9 9 9 9 9 9 9 9 9 9 8 9 8 9]]
    print(dst3)  # [[1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 3]]

    plt.figure(figsize=(9, 6))
    plt.subplot(221), plt.title("1. Black image"), plt.axis('off')
    plt.imshow(cv2.cvtColor(imgBlack, cv2.COLOR_BGR2RGB))
    plt.subplot(222), plt.title("2. White image"), plt.axis('off')
    plt.imshow(cv2.cvtColor(imgWhite, cv2.COLOR_BGR2RGB))
    plt.subplot(223), plt.title("3. Normal rand"), plt.axis('off')
    plt.imshow(imgRandN, cmap='gray', vmin=0, vmax=255)
    plt.subplot(224), plt.title("4. Uniform  rand"), plt.axis('off')
    plt.imshow(imgRandU, cmap='gray')
    plt.show()

本例程的运行结果如下

0 255 128.6
1 9 5.1
(1, 30) (1, 30) (1, 30)
[[5 4 5 5 5 6 5 5 6 4 5 4 5 5 5 6 5 5 6 5 5 5 5 4 4 5 5 5 5 6]]
[[9 8 9 9 9 9 9 9 9 8 9 9 8 9 9 9 9 9 9 9 9 9 9 9 9 9 8 9 8 9]]
[[1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 3]]

【OpenCV 例程 300篇】257.OpenCV 生成随机矩阵


Numpy 创建随机图像

OpenCV 中图像对象的数据结构是 ndarray 多维数组,因此可以用 Numpy 创建多维数组来生成图像。特别对于空白、黑色、白色、随机等特殊图像,用 Numpy 创建图像非常方便。

Numpy 可以使用 np.zeros() 等方法创建指定大小、类型的图像对象,也可以使用 np.zeros_like() 等方法创建与已有图像大小、类型相同的新图像。

函数说明:

numpy.empty(shape[, dtype, order]) # 返回一个指定形状和类型的空数组

numpy.zeros(shape[, dtype, order]) # 返回一个指定形状和类型的全零数组

numpy.ones(shape[, dtype, order]) # 返回一个指定形状和类型的全一数组

numpy.empty_like(img) # 返回一个与图像 img 形状和类型相同的空数组

numpy.zeros_like(img) # 返回一个与图像 img 形状和类型相同的全零数组

numpy.ones_like(img) # 返回一个与图像 img 形状和类型相同的全一数组

参数说明:

  • shape:整型元组,定义返回多维数组的形状
  • dtype:数据类型,定义返回多维数组的类型,可选项
  • img:ndarray 多维数组,表示一个灰度或彩色图像

基本例程:

    # 1.14 Numpy 创建图像
    # 创建彩色图像(RGB)
    # (1) 通过宽度高度值创建多维数组
    height, width, channels = 400, 300, 3  # 行/高度, 列/宽度, 通道数
    imgEmpty = np.empty((height, width, channels), np.uint8)  # 创建空白数组
    imgBlack = np.zeros((height, width, channels), np.uint8)  # 创建黑色图像 RGB=0
    imgWhite = np.ones((height, width, channels), np.uint8) * 255  # 创建白色图像 RGB=255
    # (2) 创建彩色随机图像 RGB=random
    import os
    randomByteArray = bytearray(os.urandom(height * width * channels))
    flatNumpyArray = np.array(randomByteArray)
    imgRGBRand = flatNumpyArray.reshape(width, height, channels)
    # (3) 创建灰度图像
    imgGrayWhite = np.ones((height, width), np.uint8) * 255  # 创建白色图像 Gray=255
    imgGrayBlack = np.zeros((height, width), np.uint8)  # 创建黑色图像 Gray=0
    imgGrayEye = np.eye(width)  # 创建对角线元素为1 的单位矩阵
    randomByteArray = bytearray(os.urandom(height*width))
    flatNumpyArray = np.array(randomByteArray)
    imgGrayRand = flatNumpyArray.reshape(height, width)  # 创建灰度随机图像 Gray=random
    
    print("Shape of image: gray {}, RGB {}".format(imgGrayRand.shape, imgRGBRand.shape))
    cv2.imshow("DemoGray", imgGrayRand)  # 在窗口显示 灰度随机图像
    cv2.imshow("DemoRGB", imgRGBRand)  # 在窗口显示 彩色随机图像
    cv2.imshow("DemoBlack", imgBlack)  # 在窗口显示 黑色图像
    key = cv2.waitKey(0)  # 等待按键命令

【本节完】

版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/128569524)
Copyright 2022 youcans, XUPT
Crated:2023-1-5文章来源地址https://www.toymoban.com/news/detail-423822.html

到了这里,关于【OpenCV 例程 300篇】257.OpenCV 生成随机矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • numpy 随机生成矩阵

    np.random.randint(a, b, size=(c, d)): 注:a-b表示生成[a,b]数的范围,后面size表示生成矩阵的大小 np.random.rand(a, b) 注:通过本函数可以返回一个或者一组服从“0-1”分布的随机样本值。随机样本取值的范围为[0,1) 应用:在Dropout正则化方法中用到,可以用来生成dropout随机向量例如d3 =

    2024年02月11日
    浏览(41)
  • 使用 NumPy 随机生成矩阵

    使用 NumPy 随机生成矩阵 在科学计算领域中,随机数生成是一种常见的需求。在 Python 中,NumPy 库提供了众多生成随机矩阵的函数,可以轻松地实现随机数生成。本文将详细介绍 NumPy 中生成随机矩阵的各种方法。 np.random.rand() np.random.rand() 函数用于返回 [0, 1) 之间的随机浮点数

    2024年02月03日
    浏览(40)
  • 如何使用MATLAB生成随机矩阵

    如何使用MATLAB生成随机矩阵 MATLAB是一种强大的数值计算和科学编程软件,它提供了许多功能强大的工具来生成和处理矩阵。在MATLAB中,要生成随机矩阵,可以使用内置的随机数函数。本文将向您展示如何使用MATLAB生成随机矩阵,并提供相应的源代码示例。 使用rand函数生成随

    2024年02月08日
    浏览(46)
  • 随机生成矩阵,在0~10之间,matlab代码

    你可以使用 rand 函数来随机生成矩阵。rand 函数会生成一个指定行列数的矩阵,里面的数字都在 0 到 1 之间。例如,下面的代码会生成一个 3 行 4 列的矩阵: 如果你想要生成 0 到 10 之间的随机数,你可以将 rand 函数和数学运算符结合使用。例如,下面的代码会生成一个 3 行

    2024年02月13日
    浏览(39)
  • [C++] opencv中如何生成随机颜色?

    我们可以通过C++来生成OpenCV绘图使用的随机颜色,代码如下: 这个代码将生成一个大小为100x100像素的随机颜色图像。它首先使用当前时间作为随机数种子来初始化随机数生成器。然后,它使用 rand() 函数生成三个介于0到255之间的随机整数,分别表示红色、绿色和蓝色通道的

    2024年01月19日
    浏览(36)
  • RNG类是OpenCV中的一个基本随机数生成工具

    RNG类是OpenCV中的一个基本随机数生成工具 在OpenCV中, RNG 类是用于生成随机数的伪随机数生成器(Pseudo-Random Number Generator),它可以用于生成各种类型的随机数,如整数、浮点数和随机颜色,这个类位于 opencv2/core/types.hpp 头文件中; RNG可以产生3种随机数 RNG(int seed) 使用种子

    2024年02月11日
    浏览(44)
  • 数组:矩阵快速转置 矩阵相加 三元组顺序表/三元矩阵 随机生成稀疏矩阵 压缩矩阵【C语言,数据结构】(内含源代码)

    目录 题目: 题目分析: 概要设计: 二维矩阵数据结构: 三元数组三元顺序表顺序表结构: 详细设计: 三元矩阵相加: 三元矩阵快速转置: 调试分析: 用户手册: 测试结果:  源代码: 主程序:  头文件SparseMatrix.h:  头文件Triple.h: 总结: 稀疏矩阵A,B均采用 三元组

    2023年04月26日
    浏览(62)
  • Opencv C++图像处理:矩阵Mat + 随机数RNG + 计算耗时 + 鼠标事件

    数据类型 字节数 取值范围 bool型(布尔型) 1 [0 or 1] BOOL型(int型) 4 [TRUE or FALSE] sbyte型(有符号8位整数) 1 [128 ~ 127] bytet型(无符号8位整数) 8U 2 [0 ~ 255] short型(有符号16位整数) 16S 2 [-32,768 ~ 32,767] ushort型(无符号16位整数) 16U 2 [0 ~ 65,535] int型(有符号32位整数) 32S 4 [

    2024年02月03日
    浏览(53)
  • MATLAB基础操作,矩阵乘法、数组矩阵索引、最大最小运算符、零矩阵/随机矩阵/单位矩阵的生成、log函数、Inf和NaN的含义,语句过长用连接符换行、逻辑运算符以及区别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本文总结MATLAB编程时的一些基本操作,适用于新手小白,主要包括矩阵相乘、生成矩阵、矩阵基本操作、数组索引、最大最小操作符。 线性代数的两个矩阵相乘:用符号 “ * ” 例如A*B得到A与B的矩阵相

    2024年02月04日
    浏览(74)
  • 【opencv】示例-minarea.cpp 如何寻找一组随机生成的点的最小外接矩形、三角形和圆...

    此段代码的主要功能是:利用OpenCV库生成随机点集,并计算并展示这些点的最小外包矩形、三角形和圆形。用户可以通过按键重新生成不同的随机点集,或者按ESC/Q退出程序。程序中利用了OpenCV的随机数生成函数、绘图函数以及几何形状的计算函数。

    2024年04月14日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包