OpenMV学习笔记

一、感光元件----sensor

sensor.reset()

----初始化感光元件

sensor.reset() 的功能包括:

  1. 初始化感光元件: 将摄像头感光元件初始化为默认状态,以确保其处于可用的工作状态。

  2. 恢复默认设置: 将摄像头的其他配置参数还原为默认值。这包括图像格式、帧大小等设置。

使用 sensor.reset() 可以在每次程序启动或需要重置摄像头状态时调用,以确保摄像头处于一致的状态。

sensor.reset() 被用于初始化感光元件,这是配置摄像头之前的一项重要步骤。在初始化后,可以通过其他函数来设置摄像头的像素格式、帧大小等参数,以适应应用场景。


sensor.set_pixformat()

----设置像素模式。

  • sensor.GRAYSCALE: 灰度,每个像素8bit。
  • sensor.RGB565: 彩色,每个像素16bit。

1.sensor.GRAYSCALE是一个常量,用于设置摄像头图像的像素格式为灰度模式。在这个模式下,每个像素用 8 位表示,范围从 0 到 255,其中 0 表示黑色,255 表示白色。

如果想将摄像头配置为捕获灰度图像,可以使用以下代码:

sensor.set_pixformat(sensor.GRAYSCALE)

这样设置后,摄像头将以灰度模式捕获图像,每个像素只包含亮度信息而没有颜色信息。这种模式通常用于对图像中的亮度变化进行分析,而不需要考虑颜色信息。

2.sensor.RGB565 是一个常量,用于设置摄像头图像的像素格式为 RGB565 彩色模式。在这个模式下,每个像素用 16 位表示,其中红色占用 5 位,绿色占用 6 位,蓝色占用 5 位。这样的格式提供了对颜色更细致的描述,适用于彩色图像。

如果你想将摄像头配置为以 RGB565 彩色模式捕获图像,可以使用以下代码:

sensor.set_pixformat(sensor.RGB565)

这样设置后,摄像头将以彩色模式捕获图像,每个像素包含红、绿、蓝三个颜色通道的信息。这使得你可以在图像处理和分析中考虑颜色信息。


sensor.set_framesize()

----设置图像的大小

sensor.set_framesize() 是一个函数,用于设置摄像头捕获图像的大小(帧大小)。通过调用这个函数,可以指定所需的图像分辨率。

设置图像大小对于应用程序非常重要,因为它会影响图像的清晰度、文件大小以及后续处理的计算成本。选择适当的图像大小取决于你的具体需求和系统资源。

  • sensor.QQCIF: 88x72
  • sensor.QCIF: 176x144
  • sensor.CIF: 352x288
  • sensor.QQSIF: 88x60
  • sensor.QSIF: 176x120
  • sensor.SIF: 352x240
  • sensor.QQQQVGA: 40x30
  • sensor.QQQVGA: 80x60
  • sensor.QQVGA: 160x120
  • sensor.QVGA: 320x240
  • sensor.VGA: 640x480
  • sensor.HQQQVGA: 80x40
  • sensor.HQQVGA: 160x80
  • sensor.HQVGA: 240x160
  • sensor.B64X32: 64x32 (用于帧差异 image.find_displacement())
  • sensor.B64X64: 64x64 用于帧差异 image.find_displacement())
  • sensor.B128X64: 128x64 (用于帧差异 image.find_displacement())
  • sensor.B128X128: 128x128 (用于帧差异 image.find_displacement())
  • sensor.LCD: 128x160 (用于LCD扩展板)
  • sensor.QQVGA2: 128x160 (用于LCD扩展板)
  • sensor.WVGA: 720x480 (用于 MT9V034)
  • sensor.WVGA2:752x480 (用于 MT9V034)
  • sensor.SVGA: 800x600 (仅用于 OV5640 感光元件)
  • sensor.XGA: 1024x768 (仅用于 OV5640 感光元件)
  • sensor.SXGA: 1280x1024 (仅用于 OV5640 感光元件)
  • sensor.UXGA: 1600x1200 (仅用于 OV5640 感光元件)
  • sensor.HD: 1280x720 (仅用于 OV5640 感光元件)
  • sensor.FHD: 1920x1080 (仅用于 OV5640 感光元件)
  • sensor.QHD: 2560x1440 (仅用于 OV5640 感光元件)
  • sensor.QXGA: 2048x1536 (仅用于 OV5640 感光元件)
  • sensor.WQXGA: 2560x1600 (仅用于 OV5640 感光元件)
  • sensor.WQXGA2: 2592x1944 (仅用于 OV5640 感光元件)

sensor.skip_frames(n=10)

----跳过一些帧

  • sensor.skip_frames(n=10) 跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。这在某些情况下很有用,例如当你需要等待摄像头稳定下来或跳过起始帧以减少噪音时。

sensor.snapshot()

----获取一张图像

  • sensor.snapshot() 拍摄一张照片,返回一个image对象。

用于捕获当前摄像头的一帧图像并返回该图像的对象。这个函数在使用摄像头模块时非常常见,因为它允许你获取摄像头实时捕获的图像,并对其进行后续处理或分析。以下是一个简单的示例,演示了如何使用 sensor.snapshot() 函数:

import sensor# 初始化摄像头
sensor.init()# 捕获一帧图像
img = sensor.snapshot()# 对图像进行处理或分析
# 这里可以添加任何你想要的图像处理代码

在这个例子中,使用 sensor.snapshot() 捕获了摄像头的一帧图像,并将其保存在 img 变量中。然后你可以在代码中使用 img 对象进行任何后续的图像处理或分析操作。


sensor.set_auto_gain() 

----自动增益

自动增益开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动增益。

自动增益控制(Automatic Gain Control,简称 AGC)。自动增益控制是一种摄像头功能,它可以调整图像的整体亮度,以适应不同的光照条件。

启用自动增益控制时,摄像头会自动调整增益,以确保图像的整体亮度在合适的范围内。在某些场景下,禁用自动增益控制可能更有利于精确控制图像亮度。具体的使用方式可以根据实际需求来调整。


sensor.set_auto_whitebal()

----自动白平衡

自动白平衡开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动白平衡。

动白平衡功能(Automatic White Balance,简称 AWB)。自动白平衡是摄像头功能之一,它能够自动调整图像的色彩平衡,以适应不同光照条件下的环境。

启用自动白平衡功能时,摄像头会自动调整图像的色彩平衡,以消除不同光照条件下的色彩偏差。在某些情况下,禁用自动白平衡功能可能有助于更精确地控制图像的色彩效果。具体的使用方式应根据实际需求来确定。


sensor.set_auto_exposure(enable[\, exposure_us])

自动曝光功能(Automatic Exposure,简称 AE)。自动曝光是摄像头功能之一,它能够根据环境光照情况自动调整曝光时间,以确保捕获的图像在不同光照条件下具有适当的亮度。

  • enable 是一个布尔值,用于启用或禁用自动曝光功能。如果为 True,则表示启用自动曝光;如果为 False,则表示禁用自动曝光。
  • exposure_us 是一个可选参数,表示手动设置的曝光时间,以微秒为单位。当 enable 参数为 False 时,可以提供这个参数来手动设置曝光时间。如果不提供 exposure_us 参数,则曝光时间会保持在默认值。

以下是一些示例用法:

启用自动曝光:

import sensor# 初始化摄像头
sensor.init()# 启用自动曝光功能
sensor.set_auto_exposure(True)

禁用自动曝光并手动设置曝光时间:

import sensor# 初始化摄像头
sensor.init()# 禁用自动曝光功能,并设置曝光时间为 10000 微秒(10 毫秒)
sensor.set_auto_exposure(False, exposure_us=10000)

在这些示例中,根据实际需求,可以选择启用或禁用自动曝光功能,并选择是否手动设置曝光时间。


sensor.set_windowing(roi)

----设置窗口ROI

ROI:Region Of Interest,图像处理中的术语“感兴趣区”。就是在要处理的图像中提取出的要处理的区域。

sensor.set_windowing() 是一个函数,用于设置摄像头的窗口选取(Windowing)功能。窗口选取允许你指定摄像头采集图像的感兴趣区域(Region of Interest,简称 ROI),从而可以只采集感兴趣区域内的图像,而不是整个图像。

这个函数通常接受一个参数 roi,用于指定感兴趣区域的位置和大小。roi 参数通常是一个元组或一个列表,其中包含四个值:(x, y, width, height),分别表示感兴趣区域的左上角坐标 (x, y) 和宽度、高度。

以下是一个示例用法:

import sensor# 初始化摄像头
sensor.init()# 设置感兴趣区域为从 (100, 100) 开始,宽度为 200,高度为 150
roi = (100, 100, 200, 150)
sensor.set_windowing(roi)

在这个示例中,感兴趣区域从图像的 (100, 100) 坐标开始,宽度为 200 像素,高度为 150 像素。摄像头将仅捕获和处理这个感兴趣区域内的图像,而不是整个图像。

窗口选取功能可以用于在处理或分析摄像头图像时,仅关注特定的区域,从而提高处理效率或减少处理的数据量。


sensor.set_hmirror(True)

----水平方向翻转


sensor.set_vflip(True)

----垂直方向翻转


更多sensor设置,详见OpenMV官方中文文档:sensor — 感光元件 — MicroPython 1.9.2 文档





二、图像----image

image.get_pixel(x, y)

image.set_pixel(x, y, pixel)

----获取/设置像素点

通过image.get_pixel(x, y)方法来获取一个像素点的值。

  • image.get_pixel(x, y)
    • 对于灰度图: 返回(x,y)坐标的灰度值.
    • 对于彩色图: 返回(x,y)坐标的(r,g,b)的tuple.

通过image.set_pixel(x, y, pixel)方法,来设置一个像素点的值。

  • image.set_pixel(x, y, pixel)
    • 对于灰度图: 设置(x,y)坐标的灰度值。
    • 对于彩色图: 设置(x,y)坐标的(r,g,b)的值。

举例:

img = sensor.snapshot()
img.get_pixel(10,10)
img.set_pixcel(10,10,(255,0,0))#设置坐标(10,10)的像素点为红色(255,0,0)

image.width()

image.height()

image.format()

image.size()

----获取图像的宽度和高度

  • image.width()
    返回图像的宽度(像素)

  • image.height()
    返回图像的高度(像素)

  • image.format()
    灰度图会返回 sensor.GRAYSCALE,彩色图会返回 sensor.RGB565。

  • image.size()
    返回图像的大小(byte)


image.invert()

----图像的运算

  • image.invert()

取反,对于二值化的图像,0(黑)变成1(白),1(白)变成0(黑)。

注:
图像可以是另一个image对象,或者是从 (bmp/pgm/ppm)文件读入的image对象。
两个图像都必须是相同的尺寸和类型(灰度图/彩色图)。

  • image.nand(image)
    与另一个图片进行与非(NAND)运算。

  • image.nor(image)
    与另一个图片进行或非(NOR)运算。

  • image.xor(image)
    与另一个图片进行异或(XOR)运算。

  • image.xnor(image)
    与另一个图片进行异或非(XNOR)运算。

  • image.difference(image)
    从这张图片减去另一个图片。比如,对于每个通道的每个像素点,取相减绝对值操作。这个函数,经常用来做移动检测。


image.get_statistics(roi=Auto)

----使用图像的统计信息

image.get_statistics(roi=Auto)

其中roi是目标区域。注意,这里的roi,bins之类的参数,一定要显式地标明,例如:

img.get_statistics(roi=(0,0,10,20))

如果是 img.get_statistics((0,0,10,20)),ROI不会起作用。

  • statistics.mean() 返回灰度的平均数(0-255) (int)。你也可以通过statistics[0]获得。

  • statistics.median() 返回灰度的中位数(0-255) (int)。你也可以通过statistics[1]获得。

  • statistics.mode() 返回灰度的众数(0-255) (int)。你也可以通过statistics[2]获得。

  • statistics.stdev() 返回灰度的标准差(0-255) (int)。你也可以通过statistics[3]获得。

  • statistics.min() 返回灰度的最小值(0-255) (int)。你也可以通过statistics[4]获得。

  • statistics.max() 返回灰度的最大值(0-255) (int)。你也可以通过statistics[5]获得。

  • statistics.lq() 返回灰度的第一四分数(0-255) (int)。你也可以通过statistics[6]获得。

  • statistics.uq() 返回灰度的第三四分数(0-255) (int)。你也可以通过statistics[7]获得。

上面的是灰度的值,接下来的

  • l_mean,l_median,l_mode,l_stdev,l_min,l_max,l_lq,l_uq,
  • a_mean,a_median,a_mode,a_stdev,a_min,a_max,a_lq,a_uq,
  • b_mean,b_median,b_mode,b_stdev,b_min,b_max,b_lq,b_uq,

是LAB三个通道的平均数,中位数,众数,标准差,最小值,最大值,第一四分数,第三四分数。

在图像处理中,LAB色彩空间是一种颜色模型,它将颜色分解为三个通道:亮度(L),以及两个色度通道(a 和 b)。这种颜色空间是由国际照明委员会(CIE)于1976年定义的,旨在模拟人类视觉系统对颜色的感知方式。

下面是对LAB色彩空间中每个通道的简要说明:

  1. L通道(亮度): 代表图像的亮度信息。这个通道的取值范围通常是 0 到 100(有时是 0 到 255),表示从黑到白的亮度变化。在L通道中,较高的值对应于较亮的像素,较低的值对应于较暗的像素。

  2. a通道(色度): 代表图像中从绿色到红色的变化。负值表示绿色,正值表示红色。a通道的取值范围通常是 -128 到 127,其中 -128 表示最绿的颜色,而 127 表示最红的颜色。

  3. b通道(色度): 代表图像中从蓝色到黄色的变化。负值表示蓝色,正值表示黄色。b通道的取值范围也通常是 -128 到 127,其中 -128 表示最蓝的颜色,而 127 表示最黄的颜色。

通过将颜色分解为亮度和色度通道,LAB色彩空间能够更好地模拟人类对颜色的感知,同时也更适合进行图像处理和分析,例如颜色校正、图像分割和对象检测等任务。

举例:

检测左上方的区域中的颜色值。

import sensor, image, timesensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(10) # 跳过10帧,使新设置生效
sensor.set_auto_whitebal(False)               # Create a clock object to track the FPS.ROI=(80,30,15,15)while(True):img = sensor.snapshot()         # Take a picture and return the image.statistics=img.get_statistics(roi=ROI)color_l=statistics.l_mode()color_a=statistics.a_mode()color_b=statistics.b_mode()print('L都众数:',color_l,'A的众数:',color_a,'B的众数:',color_b)img.draw_rectangle(ROI)

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

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

相关文章

嵌入式中全面解析 SPI 通信协议方法

SPI 的英文全称为 Serial Peripheral Interface,顾名思义为串行外设接口。SPI 是一种同步串行通信接口规范,主要应用于嵌入式系统中的短距离通信。该接口由摩托罗拉在20世纪80年代中期开发,后发展成了行业规范。 SPI 是一种高速的、全双工的…

算法沉淀——优先级队列(堆)(leetcode真题剖析)

算法沉淀——优先级队列 01.最后一块石头的重量02.数据流中的第 K 大元素03.前K个高频单词04.数据流的中位数 优先队列(Priority Queue)是一种抽象数据类型,它类似于队列(Queue),但是每个元素都有一个关联的…

嵌入式Linux平台大文件生成以及处理方法

在日常工作中,为了验证某些场景下的功能,经常需要人为构造一些大文件进行测试,有时需要用大文件来测试下载速度,有时需要用大文件来覆盖磁盘空间;偶尔会看到一些网络博文会教大家如何构造大文件;但是当需要…

英伟达(NVIDIA)和CUDA

英伟达(NVIDIA)是一家知名的图形处理器(GPU)制造公司,而CUDA则是NVIDIA推出的一种并行计算架构和编程模型。CUDA全称为Compute Unified Device Architecture,即计算统一设备架构,它允许开发者使…

43. C++ 指针合集

C/C指针合集 1. 指针变量的空间大小 指针变量的空间大小是固定值(64位下为8字节, 32位下为4字节),跟其指向的数据类型及多级指针无关,与编译平台相关(指针大小由当前CPU运行模式的寻址位数决定&#xff0…

杨中科 ASP.NET DI综合案例

综合案例1 需求说明 1、目的:演示DI的能力; 2、有配置服务、日志服务,然后再开发一个邮件发送器服务。可以通过配置服务来从文件、环境变量、数据库等地方读取配置,可以通过日志服务来将程序运行过程中的日志信息写入文件、控制台、数据库等。 3、说明…

第三百四十九回

文章目录 1. 概念介绍2. 原理与方法2.1 知识对比2.2 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"加密包crypto"相关的内容,本章回中将介绍characters包.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在项目中会遇到获取字…

String类常用方法(Java)

String类 字符串相减/替换 使用 String 类的 replace() 方法来实现这个功能: replace(“target”,“replacement”) 如果你想将引号添加到字符串中,你可以使用转义字符 \" 来表示双引号。 String str1 "abcdefg"; String str2 "bcd"…

Django实战:部署项目 【资产管理系统】,Django完整项目学习研究(项目全解析,部署教程,非常详细)

导言 关于Django,我已经和大家分享了一些知识,考虑到一些伙伴需要在实际的项目中去理解。所以我上传了一套Django的项目学习源码,已经和本文章进行了绑定。大家可以自行下载学习,考虑到一些伙伴是初学者,几年前&#…

OpenAI又出王炸,Sora是否要开启视频AI新时代?

OpenAI又出王炸,Sora是否要开启视频AI新时代? 关注微信公众号 DeepGoAI 前几天我们还在讨论 如何让ChatGPT3.5变得更聪明 今天OpenAI就带着新王炸出现了 如同ChatGPT一般 在计算机领域掀起轩然大波 开启真正视频AI新时代 那就是 Sora 很多同学可…

结构体对齐规则及为什么会有结构体对齐

前言: 大家在学习结构体中,在计算结构体大小时想必会很疑惑,为什么结构体的大小不是按照常理像数组一样一个字节一个字节的挨在一起放?今天带大家一起深入探讨一下背后的规则和原因。 结构体对齐规则: 结构体对齐其实…

离散数学截图2

为什么G中阶大于2的元素,一定有偶数个 在有限群G中,阶大于2的元素个数一定是偶数的原因如下: 设 aaa 是群G中一个阶大于2的元素,那么根据群的定义和阶的概念(即某个元素的幂次使得其等于单位元的最小正整数&#xff…

【Linux】 Linux 小项目—— 进度条

进度条 基础知识1 \r && \n2 行缓冲区3 函数介绍 进度条实现版本 1代码实现运行效果 版本2 Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!!! 基础知识 1 \r &&a…

linux 安装docker

目录 环境 操作步骤 1 下载脚本 2 执行脚本 3 检查docker版本,证明安装成功 环境 阿里云 ubuntu 22.04 64位 操作步骤 参考linux系统安装docker-腾讯云开发者社区-腾讯云 (tencent.com) 1 下载脚本 curl -fsSL https://get.docker.com -o get-docker.sh …

牛客小白月赛87

说明 年后第一次写题,已经麻了,这次的题很简单但居然只写了两道题。有种本该发挥80分的水平,但是只做出了20分的水平的感觉。不过剩下几个题(除了G题),比完赛一小时内就AC了。欢迎大家交流学习。&#xff0…

SpringBoot 整合 Redis 全面教程:从配置到使用

Redis 是一种高性能的键值存储数据库,而 Spring Boot 是一个简化了开发过程的 Java 框架。将两者结合,可以轻松地在 Spring Boot 项目中使用 Redis 来实现数据缓存、会话管理和分布式锁等功能。 一、添加 Redis 依赖 在 pom.xml 文件中添加 Redis 相关…

OpenCV 笔记(22):图像的缩放——最近邻插值、双线性插值算法

1. 图像缩放 1.1 简介 图像缩放是指通过增加或减少像素来改变图像尺寸的过程,是图像处理中常见的操作。图像缩放会涉及效率和图像质量之间的权衡。 图像放大(也称为上采样或插值)的主要目的是放大原图像,以便在更高分辨率的显示设…

学习 JavaScript 闭包

1. 前言 闭包是 JavaScript 中一种非常重要的概念,它允许函数访问其外部作用域中的变量,即使在函数被返回或者在其原始定义的作用域之外执行时仍然可以访问这些变量。 在讲解闭包之前我们得弄清楚下面的概念: 作用域链: JavaSc…

RK3568笔记十五:触摸屏测试

若该文为原创文章,转载请注明原文出处。 使用正点原子的ATK-RK3568板子,一直在测试屏幕和视频,突然想到触摸屏测试,一直没有用过,原子给的demo跑的是QT系统,触摸功能是正常的,测试一下&#xf…

Java Arrays源码剖析

Java中有一个类Arrays,包含一些对数组操作的静态方法,本文主要就来讨论这些方法以避免重新造轮子,在需要的时候自己实现它不具备的功能。 toString Arrays的toString()方法可以方便地输出一个数组的字符串形式,以便查看。它有9个重载的方法…