OpenMV使用技巧

article/2025/9/28 1:08:10

目录

  • 一、光照影响
    • 1. 光照过强
    • 2. 光照过弱
  • 二、杂框影响
    • 1. threshold参数
    • 2. 长宽比
  • 三、画图

一、光照影响

  OpenMV在使用过程中可能会遇到光照太强或者光照太弱等影响图像识别的情况,尤其在跑神经网络模型时,光照太强或太弱对识别结果的影响是致命的。

1. 光照过强

  针对光照过强这一影响因素,可以通过调节摄像头的初始参数来解决。比较常用的摄像头参数如下:

sensor.reset()                       # 初始化相机传感器
sensor.set_pixformat(sensor.RGB565)  # 设置像素模式
sensor.set_framesize(sensor.QVGA)    # 设置分辨率
sensor.skip_frames(time = 200)       # 跳过20毫秒的帧
sensor.set_auto_gain(True)           # 打开自动增益, 默认打开;追踪颜色,则需关闭白平衡。
sensor.set_auto_whitebal(True)       # 打开(True)或关闭(False)自动白平衡。默认打开;追踪颜色,则需关闭白平衡
sensor.set_auto_exposure(True)       # 打开(True)或关闭(False)自动曝光。默认打开。

  上述设置为比较基本的参数初始化方法,但针对光照过强的影响,可以通过改变以下三个参数来解决:

sensor.set_contrast(constrast)      # 设置相机图像对比度。-3+3。
sensor.set_brightness(brightness)   # 设置相机图像亮度。-3+3。
sensor.set_saturation(saturation)   # 设置相机图像饱和度。-3+3

  通过固定相机图像的对比度、亮度和饱和度,基本可以保证在一定光照变化范围内,相机拍摄的图像的质量是相差无几的,即可以解决光照过强对OpenMV图像识别的影响。

2. 光照过弱

  当环境光照过弱时,只通过固定相机图像的对比度、亮度和饱和度并不能解决问题,此时需要通过人工增加光照,并且还要固定相机图像的对比度、亮度和饱和度。

在这里插入图片描述

  人工增加光照可以通过外加上图所示的LED灯带来实现,但外加LED灯带还需要额外给LED灯带的供电,且外加的LED灯带通常需要8-12V的电压来供电。常出现的问题是灯带的位置不好确定且供电电压不易寻找。

  OpenMV自身有四个LED灯,分别为红灯、绿灯、蓝灯和白灯,其中白灯的亮度可以应对一般的光照过弱场景,因此可以使用OpenMV自带的白色LED灯来增加光照,既不需要改变结构又不需要额外的供电电压。

import pyb
from pyb import LED #导入LEDred = LED(1)    # 定义一个LED1   红灯
green = LED(2)  # 定义一个LED2   绿灯
blue = LED(3)   # 定义一个LED3   蓝灯
white = LED(4)  # 定义一个LED4   照明灯while(True):red.on()        # 打开红灯pyb.mdelay(500) # 延时500msred.off()       # 关闭红灯pyb.mdelay(500)green.on()pyb.mdelay(500)green.off()pyb.mdelay(500)blue.on()pyb.mdelay(500)blue.off()pyb.mdelay(500)white.on()pyb.mdelay(500)white.off()pyb.mdelay(500)

二、杂框影响

  在使用find_rects()函数查找图像中的矩形时,可能会识别到非目标矩形,甚至识别到一些奇形怪状的矩形,这也会影响识别的结果。

1. threshold参数

  这种情况可以通过修改threshold参数来解决,此时,只有边界大小小于threshold的矩形才会被识别出来,其余矩形全被过滤掉了。

image.find_rects([threshold=10000])

2. 长宽比

  但这种方法并不能解决全部的问题,有时OpenMV还会识别到一些长度很大、宽度很小或者宽度很大、长度很小的矩形,此时可以通过限制长度和宽度限制长宽比来筛选正确的矩形框:

while(True):img = sensor.snapshot()for r in img.find_rects(threshold = 10000):             # 在图像中搜索矩形print(r.rect()[3])  								# 索引[3]:返回矩形的高度print(r.rect()[2])  								# 索引[2]:返回矩阵的宽度if(abs(r.rect()[3]) > 160 or abs(r.rect()[2]) > 160 or abs(r.rect()[3]) < 70 or abs(r.rect()[2]) < 70): # 限制长度和宽度break    	if(r.rect()[3]/r.rect()[2]>1.3 or r.rect()[3]/r.rect()[2]<0.7): # 限制长宽比break

  需要注意的是,上述threshold参数和长度宽度的取值都需要根据实际应用场景和对象来确定,每个物体的参数是不一样的。

三、画图

  在调试程序的过程中,可以在OpenMV IDE窗口中画一些图来直观地观察程序运行过程。

while(True):img = sensor.snapshot()img.draw_rectangle(r.rect(), color = (255, 0, 0))   # 绘制矩形外框,便于在IDE上查看识别到的矩形位置img.draw_cross(int(r.rect()[0] + r.rect()[2]/2), int(r.rect()[1] + r.rect()[3]/2), color = (0, 255, 0))#在矩形中心画十字img.draw_string(r.rect()[0] + 20, r.rect()[1]-20, 001+"my openmv"),color = (255,0,0), scale = 2,mono_space=False)#显示类别名称和准确率for p in r.corners():img.draw_circle(p[0], p[1], 5, color = (0, 255, 0))img.draw_rectangle(r.rect(), color = (255, 0, 0))#在矩形的四个边角画出四个圆    

http://chatgpt.dhexx.cn/article/MltN1BqT.shtml

相关文章

VC++6.0配置opencv1.0教程(全网最详细)附加图文

VC6.0配置opencv1.0教程&#xff08;全网最详细&#xff09;附加图文 &#xff08;&#xff08;很多评论我没时间看&#xff0c;tiquma写出来了&#xff0c;有兴趣的同学自己找一找8&#xff09; 配置前 第一次写博客&#xff0c;激动٩(๑>◡<๑)۶&#xff0c;坐标武…

C/C++ vs2017 OpenCV简单入门

离职之际&#xff0c;自学一下图像相关的知识点&#xff0c;只是简单学了一点皮毛&#xff01; 目录 一、 OpenCV环境搭建 二、使用opencv 常用接口说明 使用案例 1. 图像色彩空间转换 2. Mat对象的创建与赋值 3. 图像像素的读写操作 4. 图像像素的算术操作 5. 滚动条…

VS2017搭建OpenCV环境(新手详细教程)

整体流程如下&#xff1a; 下载Visual Studio2017版本下载OpenCV3.4.1版本配置环境变量在Visual Studio2017中引入头文件、库文件、链接库环境测试 说明&#xff1a;没有必要根据博主的博客下载与博客相应的版本&#xff0c;不同版本之间只需要改一点点东西即可 1、下载安装V…

《OpenCV联合C++》第一课:OpenCV下载及环境配置

1.下载OpenCV软件 官网下载Releases - OpenCV 下载对应文件即可 下载后导出到本地 导出中。。。 2.环境变量配置 导入对应文件夹下面路径..\opencv\build\x64\vc15\bin 3.文件夹内文件拷贝指定路径 打开文件夹下面路径.\opencv\build\x64\vc15\bin 将bin目录下面的opencv_wor…

OpenCV入门教程,超详细OpenCV入门教程!10小时让你轻松掌握opencv的使用

OpenCV是一个基于BSD许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语言的接…

VS+OpenCV+VC超详细的配置教程

写在前面的话 版权声明&#xff1a;转载请注明出处&#xff01;博主是一个小菜鸟&#xff0c;并且非常玻璃心&#xff01;如果文中有什么问题&#xff0c;请友好地指出来&#xff0c;博主查证后会进行更正。每篇文章都是博主现阶段的理解&#xff0c;如果理解的更深入的话&…

OpenMV入门介绍

目录 一、OpenMV是什么二、OpenART mini与OpenMV对比三、图像处理背景知识1.像素和分辨率2. 帧率3.RGB三原色4.LAB颜色空间 四、OpenMV图像处理方法1.感光元件自动增益/白平衡/曝光窗口ROI 2.画图画线画框画圆画十字写字示例 3. 寻找色块&#xff08;颜色识别&#xff09;find_…

最新opencv-c++安装及配置教程(VS2019 C++ opencv4.4.0)

以前写过opencv python的安装教程&#xff0c;后来有一些同学开始私信我如何安装及配置opencv c。 本文是以最新的版本入手&#xff0c;一步步详解opencv c 的安装及配置过程。&#xff1a; 第一步&#xff0c;下载解压opencv 算法库 进入到以下链接&#xff1a;https://opencv…

超详细:VS配置OpenCV教程,需要收藏

目录 安装环境说明 下载OpenCV 配置OpenCV开发环境 属性表 测试 可能存在的问题 安装环境说明 操作系统&#xff1a;Windows10 OpenCV版本&#xff1a;OpenCV2和OpenCV3 VS版本&#xff1a;VS2015或者VS2017 下载OpenCV OpenCV下载地址&#xff1a;Home - OpenCV或者直…

【OpenCV教程合集版】一文入门和精通OpenCV(C/C++)

文章目录&#xff08;OpenCV版本4.6.0&#xff09; 1.数据类型2.矩阵基本操作2.1 全零矩阵2.2 全一矩阵2.3 单位矩阵2.4 矩阵转置2.5 求逆矩阵2.6 逗号式分隔创建矩阵2.7 矩阵定义(只列出常用的)2.7.1 数据类型Scalar 2.8 通过ptr与at函数遍历矩阵2.8.1 Vec类型 2.9 通过迭代器…

openCV超详细入门教程(python版)

涉及内容&#xff1a; 背景提取颜色过滤边缘检测用于对象识别的特征匹配一般对象识别 你将需要两个主要的库&#xff0c;第三个可选&#xff1a;python-OpenCV&#xff0c;Numpy 和 Matplotlib。 一、加载图片 首先&#xff0c;我们正在导入一些东西&#xff0c;我已经安装了…

OpenCV的简单使用教程与基本函数(C++版本)

OpenCV的简单使用教程&#xff08;C&#xff09; OpenCV简介OpenCV的使用基础打开、显示和保存图像图像存储变量 Mat类图像元素的存储读入图像文件创建Mat类复制Mat类图像元素的访问OpenCV画图命令行交互界面 OpenCV简介 OpenCV是一个开源发行的跨平台计算机视觉和机器学习软件…

OpenMV入门

1. 什么是OpenMV OpenMV 是一个开源&#xff0c;低成本&#xff0c;功能强大的 机器视觉模块。 OpenMV上的机器视觉算法包括 寻找色块、人脸检测、眼球跟踪、边缘检测、标志跟踪 等。 以STM32F427CPU为核心&#xff0c;集成了OV7725摄像头芯片&#xff0c;在小巧的硬件…

OpenMV零基础教程

一、资料导航 “工欲善其事&#xff0c;必先利其器”。在正式学习OpenMV之前&#xff0c;你必须知道一条或几条OpenMV的学习途径。这里推荐星瞳科技的中文官网教程&#xff0c;这个教程里面包括了OpenMV IDE的下载和安装、OpenMV上手教程、OpenMV中文文档、OpenMV详细参数以及O…

C++版本OpenCv教程

C版本OpenCv教程(一)Mat—基本的图像容器 目标 我们有多种方法从现实世界获取数字图像:数码相机、扫描仪、计算机断层扫描和磁共振成像等等。在以上任何情况下&#xff0c;我们(人类)看到的都是图像。然而&#xff0c;当将其转换到我们的数字设备时&#xff0c;我们所记录的是…

VS配置OpenCV教程(超详细)

目录 安装环境说明 下载OpenCV 配置OpenCV开发环境 属性表 测试 可能存在的问题 安装环境说明 操作系统&#xff1a;Windows10 OpenCV版本&#xff1a;OpenCV2和OpenCV3 VS版本&#xff1a;VS2015或者VS2017 下载OpenCV OpenCV下载地址&#xff1a;http://opencv.org…

伺服控制原理 及RT and IRT

什么是伺服系统&#xff1f; 以物体的位置、方向、速度等为控制量&#xff0c;以跟踪输入给定制的任意变化为目的&#xff0c;所构成的自动闭环控制系统。 伺服系统组成&#xff1a; 伺服系统是具有负反馈的闭环自动控制系统&#xff0c;由控制器、伺服驱动器、伺服电机和反…

ERTEC200P-2 PROFINET设备完全开发手册(3-1)

3. 读写周期数据 PROFINET的基本通讯模型如下图&#xff1a; Profinet 是基于标准以太网技术的应用层协议&#xff0c;支持4种类型的数据通道 标准通道&#xff1a;参数化及配置&#xff0c;读诊断数据&#xff0c;设备信息(I&M)&#xff0c;资产信息 (AMR) ;&#xff08…

ERTEC200P-2 PROFINET设备完全开发手册(8-2)

8.2 IRT通讯原理及API PROFINET RT通讯的特点&#xff1a; 典型的PROFINET网络如下图所示。 其中&#xff1a; T1: 采样输入 T2: IO背板周期 T3: Profinet I/O 通讯周期 T4: CPU组织块OB1执行周期 T5: Profinet I/O 通讯周期 T6: IO背板周期 T7: 建立输出 在PRO…

多维IRT模型的EM估计

多维IRT模型的EM估计 MIRT &#xff08;Multidimensional Item Response Theory&#xff09;多维项目反应理论。与一维项目反应理论的区别只是在于对于潜在变量的 θ i \theta_{i} θi​ 的建模&#xff0c;一个是unidimensional latent trait θ i \theta_{i} θi​&#xf…