当前位置: 首页 > article >正文

嵌入式硬件---OpenMV文件系统基本图像处理


文章目录

  • 前言
  • 第一部分:文件系统
    • 根目录
    • 绝对路径与相对路径
    • MicroPython的OS模块
    • main.py
  • 第二部分:图像处理
    • 图像像素
    • 感兴趣区
    • Statistics信息
    • 色块寻找
    • 对象(blobs)
    • 颜色阈值
    • 常用图像函数
  • 总结


前言

以上就是今天要讲的内容,本文简单介绍了OpenMV中文件系统、基本图像操作。


第一部分:文件系统

根目录

路径都是以根目录为起点。
插入sd卡后,根目录就是SD卡
不插入sd卡根目录就是内置的Flash。

绝对路径与相对路径

绝对路径是以根目录为起点的,相对路径是以当前目录为起点的。

MicroPython的OS模块

  1. os.listdir([dir])
    如果**没有参数,列出当前目录。**如果给了参数,就列出参数所代表的目录。

  2. os.getcwd()
    获得当前目录

  3. os.mkdir(path)
    新建一个新的目录

  4. os.remove(path)
    删除文件

  5. os.rmdir(path)
    删除目录

  6. os.rename(old_path, new_path)
    重命名文件

main.py

上电自动运行这个文件的代码,代码执行的当前目录就是根目录。

第二部分:图像处理

图像像素

坐标系
分辨率即有多少像素
焦距越大-仰角越小-成像越大

感兴趣区

roi的格式是(x, y, w, h)的tupple.

x:ROI区域中左上角的x坐标
y:ROI区域中左上角的y坐标
w:ROI的宽度
h:ROI的高度

Statistics信息

image.get_statistics(roi=Auto)

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

img.get_statistics(roi=(0,0,30,60))

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

色块寻找

函数:

image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)
  1. thresholds是颜色的阈值,注意:这个参数是一个列表,可以包含多个颜色。如果你只需要一个颜色,那么在这个列表中只需要有一个颜色值,如果你想要多个颜色阈值,那这个列表就需要多个颜色阈值。
  2. roi是“感兴趣区”。
  3. x_stride 就是查找的色块的x方向上最小宽度的像素,默认为2
  4. y_stride 就是查找的色块的y方向上最小宽度的像素,默认为1
  5. invert 反转阈值,把阈值以外的颜色作为阈值进行查找
  6. area_threshold 面积阈值,如果色块被框起来的面积小于这个值,会被过滤掉
  7. pixels_threshold 像素个数阈值,如果色块像素数量小于这个值,会被过滤掉
  8. merge 合并,如果设置为True,那么合并所有重叠的blob为一个
  9. margin 边界,如果设置为1,那么两个blobs如果间距1一个像素点,也会被合并。

对象(blobs)

find_blobs对象返回的是多个blob的列表。(注意区分blobs和blob,这只是一个名字,用来区分多个色块,和一个色块)。

blob方法:

  1. blob.rect() 返回这个色块的外框——矩形元组(x, y, w, h),可以直接在image.draw_rectangle中使用。
  2. blob.x() 返回色块的外框的x坐标(int),也可以通过blob[0]来获取。
  3. blob.y() 返回色块的外框的y坐标(int),也可以通过blob[1]来获取。
  4. blob.w() 返回色块的外框的宽度w(int),也可以通过blob[2]来获取。
  5. blob.h() 返回色块的外框的高度h(int),也可以通过blob[3]来获取。
  6. blob.pixels() 返回色块的像素数量(int),也可以通过blob[4]来获取。
  7. blob.cx() 返回色块的外框的中心x坐标(int),也可以通过blob[5]来获取。
  8. blob.cy() 返回色块的外框的中心y坐标(int),也可以通过blob[6]来获取。
  9. blob.rotation() 返回色块的旋转角度(单位为弧度)(float)
  10. blob.code() 返回一个16bit数字,每一个bit会对应每一个阈值。这个功能可以用于查找颜色代码。也可以通过blob[8]来获取。
  11. blob.count() 如果merge=True,那么就会有多个blob被合并到一个blob,这个函数返回的就是这个的数量。如果merge=False,那么返回值总是1。也可以通过blob[9]来获取。
  12. blob.area() 返回色块的外框的面积。应该等于(w * h)
  13. blob.density() 返回色块的密度。这等于色块的像素数除以外框的区域。如果密度较低,那么说明目标锁定的不是很好。
    比如,识别一个红色的圆,返回的blob.pixels()是目标圆的像素点数,blob.area()是圆的外接正方形的面积。

颜色阈值

LAB颜色空间
一个颜色阈值的结构:

red = (minL, maxL, minA, maxA, minB, maxB)

元组里面的数值分别是L A B 的最大值和最小值

Lab颜色空间中,L亮度a的正数代表红色,负端代表绿色;b的正数代表黄色,负端代表兰色。不像RGB和CMYK色彩空间Lab颜色被设计来接近人类视觉。
因此L分量可以调整亮度对,修改a和b分量的输出色阶来做精确的颜色平衡。

注意:亮度一变,整个颜色的值会变化的很大

常用图像函数

sensor.set_contrast(contrast: int)None

设计相机图像对比度。-3 到 +3。

sensor.set_brightness(brightness: int)None

设置相机图像亮度。-3 到 +3。

sensor.set_saturation(saturation: int)None

设置相机图像饱和度。-3 到 +3。

sensor.get_windowing()→ Tuple[int, int, int, int]

返回先前使用 sensor.set_windowing() 设置的 roi 元组 (x, y, w, h)。

sensor.set_windowing(roi: Tuple[int, int] | Tuple[int, int, int, int])None

将相机的分辨率设置为当前分辨率内的子分辨率。例如,将分辨率设置为 sensor.VGA,然后将窗口设置为(120,140,200,200)将使 sensor.snapshot() 捕获相机传感器输出的VGA分辨率的中心200×200像素。您可以使用窗口化来获取自定义分辨率。此外,在较大分辨率上使用窗口化实际上是数字变焦。
roi 是一个矩形元组 (x, y, w, h)。但是,您也可以只传递 (w, h),并且 roi 将在帧中居中。您还可以不使用括号传递 roi。
此函数将自动处理将传递的roi裁剪到帧大小。

sensor.get_framesize()int

返回相机模块的帧大小。

sensor.set_framerate(rate: int)None

设置相机模块的帧率(以赫兹为单位)。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了OpenMV中文件系统、基本图像操作。


http://www.kler.cn/a/541301.html

相关文章:

  • 【开源AI】AI一页一页读PDF
  • FFmpeg + OpenGL ES 美颜相机教程大纲
  • 云计算——AWS Solutions Architect – Associate(saa)4.安全组和NACL
  • Android开发简历优化指南
  • 【Git】Failed to connect to github.com port 443: Timed out
  • EasyExcel 导出合并层级单元格
  • 《量化绿皮书》Chapter 3 Calculus and Linear Algebra 微积分与线性代数(一)
  • 字节跳动大模型应用 Go 开发框架 —— Eino 实践
  • 结合实际讲NR系列2—— SIB1
  • 解锁 CSS Grid 高级技巧:提升网页布局灵活性的秘诀
  • PyTorch torch.sign函数介绍
  • MySQL 8版本认证问题
  • DeepSeek模型场景应用:基于腾讯云HAI搭建IDEA开发助手
  • Redis双写一致性(数据库与redis数据一致性)
  • Cisco ISE升级
  • ModuleJS 与 CommonJS 混用的两种解决方案
  • Day62_补20250210_图论part6_108冗余连接|109.冗余连接II
  • LINUX嵌入式交叉编译:cJSON
  • python-leetcode 24.回文链表
  • element-plus el-tree-select 修改 value 字段
  • 【排序算法】桶排序
  • APL语言的云计算
  • Vue全流程--Vue3.0与Vue2.0响应式原理对比
  • Vivado IP之浮点数Floating-point
  • Golang Web单体项目目录结构最佳实践
  • 2024护网日记,怎么准备护网