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

news2024/9/28 19:20:51

『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]]

在这里插入图片描述


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【caddy】 caddy反向代理api服务 聚合go-zero微服务 放过nginx让caddy来快速实现吧

帮助go-zero开发者聚合api 相关视频一、go-zero 微服务整体架构1、微服务的基本架构2、go-zero 微服务的 apiauthrpc.api 文件routes.go 文件 二、本地开发的痛点1、本地多个端口开启的服务2、apifox、postman 三、caddy1、mac下caddy安装2、配置我们自己的caddyfile1&#xff…

SpringBootWeb入门-HTTP协议

一、SpringBootWeb-快速入门 建好springboot工程之后,只留下这几个文件。 这个是springboot的父工程,其实就是继承 二、HTTP协议-概述 •HTTP-概述 三、HTPP协议-请求协议 四、HTTP协议-响应协议 一、状态码大类 状态码分类说明1xx响应中——临时状态码…

buuctf -2

目录 你竟然赶我走 大白 N种方法解决 [ACTF2020 新生赛]Include 1 php://filter的一些学习 [ACTF2020 新生赛]Exec [强网杯 2019]随便注 你竟然赶我走 1.下载文件,得到一张图片 2.放进010分析,在文件尾得到flag 大白 1.根据题目提示&#xff0…

Python安装模块总失败?一次教你学会镜像安装

人生苦短,我用python 安装模块总是不成功? 这次一次性讲清楚~ 还是安装报错指路:点击此处跳转文末名片获取 为什么会出现安装模块失败? 首先我们要知道 其实大部分我们在用的模块, 都是歪果仁开发的, 然而我们在输入 “pip install 模块名” 的时候,…

「 JVM 」常见的垃圾收集器Garbage collector(GC)

「 JVM 」常见的垃圾收集器Garbage collector(GC) 参考&鸣谢 【JVM系统学习之路】常见垃圾回收器 山间木匠 Java 的七种垃圾收集器 | Linux 中国 Jayashree Huttanagoudar 带你走近Java虚拟机到底有哪些经典的垃圾收集器 码上遇见你 文章目录 「 JV…

2023.04.17 运行开源代码tinyriscv步骤及遇到问题

tinyriscv:https://gitee.com/liangkangnan/tinyriscv/tree/verilator 如有错误之处还请不吝赐教! 1、安装gcc工具链 下载gcc工具链(百度云链接,提取码:yaib),使用下面的命令解压到/opt/riscv32目录下: …

Spring定时任务常用Cron表达式

目录 一、SpringBoot定时任务 定时任务概述 创建定时任务 代码开启定时任务 执行结果 (单线程) 多线程处理定时任务 执行结果(并发) 二、Cron详解 Cron表达式是什么 Cron表达式的结构 每个域可出现的字符类型和各字符的…

花生采摘

[NOIP2004 普及组] 花生采摘 题目描述 鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”。 鲁宾逊先生和多多都…

linux 安装神州通用数据库 V7.0

linux 安装神州通用数据库 V7.0 操作系统、数据库1、官方下载链接2、windows客户端下载链接3、官方安装手册4、安装前准备3.1、创建安装用户3.2、以root 用户修改神通数据库安装包的所有者为shentong 用户3.3、以root 用户创建神通数据库主目录并修改所有者为shentong 用户3.4、…

学成在线笔记+踩坑(2)——【内容模块】课程基础查询,swagger+数据库字典+Httpclient+跨域

目录 1.【内容模块】需求分析 2.【内容模块】模块工程的结构 3.【课程查询功能1】通用 3.1 分析数据模型 3.2 mybatis-plus代码生成器 3.3 内容模块聚合api,model,service模块 3.4 接口设计分析 3.5 【基础模块】分页查询模型类 3.6【基础模块】日期配置类 3.7【内容…

Ae 入门系列之九:表达式

与使用关键帧相比,Ae 的表达式 Expression也用于控制属性值。 只不过使用表达式能简化操作,大大提高工作效率,使复杂动画的制作变得更加轻松。 ◆ ◆ ◆ 表达式语法基础 表达式基于标准的 JavaScript 语言。 如果熟悉脚本语言编程&#xff…

AutoGPT初次探索:免费体验、使用指南与心得总结

AutoGPT初次探索:免费体验、使用指南与心得总结 写在前面的废话一、部署 Auto-GPT二、试运行 Auto-GPT三、我踩过的坑四、后续探索 AutoGPT是一种基于GPT的自动化系统,为GPT提供了一个身体和内存,使其能够自主执行任务,例如市场分…

自己的完整c++ cuda包

pytorch关于c的所有文档集合 Welcome to PyTorch Tutorials — PyTorch Tutorials 2.0.0cu117 documentation 1.前置条件 使用编辑器clion,安装好cudatoolkit,cudnn,pytorch环境,编译工具gcc等等。 记得要设置好cudatoolkit的…

【C++】哈希的应用——布隆过滤器

哈希的应用——布隆过滤器 文章目录 哈希的应用——布隆过滤器一、布隆过滤器的概念与性质1.布隆过滤器的引出2.布隆过滤器的概念3.布隆过滤器的误判4.布隆过滤器的应用场景5.布隆过滤器优缺点6.如何选择哈希函数个数和布隆过滤器长度 二、布隆过滤器的实现1.布隆过滤器基本框架…

机器学习——SVM原理

问:支持向量机是基于经验风险最小化(ERM) 原则构建的,因此有更好的泛化性能。 答:错误。支持向量机是一种基于结构风险最小化原则构建的机器学习算法,它可以通过寻找合适的分割超平面来实现分类任务,并且具有较好的泛…

设计模式:软件设计原则

文章目录 1.开闭原则2.里氏代换原则3.依赖倒转原则4.接口隔离原则5.迪米特法则6.合成复用原则 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开…

QGIS绘制一张地图学习笔记01——配准栅格数据并解决配准导出的栅格文件不能显示的问题

1、进入配准工具主页面 首先,打开我们的绘制底图或者叫配准目标底图,我这里用的是高德的在线地图,具体qgis加载在线地图的方法见我前面的章节。加载的在线地图如下所示。 接着我们点击上方菜单栏的 栅格 菜单,点击菜单中的 配准工…

软件测试-测试用例案例及思维导图展示

目录 自动售货机的测试用例 一个杯子的测试用例 一支笔的测试用例 朋友圈点赞的测试用例 登录模块 购物车的测试用例 Windows对文件的复制粘帖功能的测试用例 自动售货机的测试用例 一个杯子的测试用例 一支笔的测试用例 朋友圈点赞的测试用例 功能测试 1点赞后是否显示…

docker安装rabbitMq集群

一 机器准备 准备三台虚拟机: 192.168.56.102 102.168.56.103 102.168.56.104 二 拉取镜像 在三台虚拟机上分别执行: docker pull rabbitmq:3.9.5-management 三 启动容器 103: docker run -d --hostname node2 --ad…

React--》React组件变化每次都会导致重新渲染,如何解决?

目录 React.memo useCallback useMemo React.memo React组件会在两种情况下下发生渲染 第一种:当组件自身的state发生变化时 第二种:当组件的父组件重新渲染时 第一种情况下重新渲染无可厚非,state都变化了组件自然应该重新进行渲染&…