非常详细的视频和文字教程,讲解常见的openmv教程包括 巡线、物体识别、圆环识别、阈值自动获取、openmv与STM32通讯、openmv识别物体、openmv巡线代码、openmv数字识别、openmv识别颜色和形状、openmv串口发送数据、openmv脱机运行等。非常适合学习openmv、K210、K230等项目
视频合集链接在:
openmv教程合集 openmv入门到项目开发 openmv和STM32通信 openmv和opencv区别 openmv巡线 openmv数字识别教程LCD
想看openmv教程线上文档可以看 这个文档所在合集
或者摄像头图像并且输出调试端口输出帧率代码如下:
# This work is licensed under the MIT license.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
#教程作者: 好家伙VCC
#教程作者:好家伙VCC
#欢迎交流群QQ: 771027961 作者邮箱: 1930299709@qq.com
#更多教程B站主页:[好家伙VCC的个人空间-好家伙VCC个人主页-哔哩哔哩视频](https://space.bilibili.com/434192043)
#淘宝主页链接:[首页-好家伙VCC-淘宝网](https://shop415231378.taobao.com)
#更多嵌入式手把手教程-尽在好家伙VCC
#
# Welcome to the OpenMV IDE! Click on the green run arrow button below to run the script!
import sensor # 引入感光元件的模块,用于操作摄像头传感器
import time # 引入时间模块,用于控制时间延迟和FPS计算
# 初始化传感器
sensor.reset() # Reset and initialize the sensor. 重置并初始化传感器
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE) 设置像素格式为RGB565(或者灰度)
sensor.set_framesize(sensor.QVGA) # Set frame size to QVGA (320x240) 设置帧大小为QVGA(320x240分辨率)
#***************************如果不需要镜像就注释掉 下面 的代码********************
# 设置摄像头镜像/翻转操作,根据摄像头安装的方向决定是否需要
sensor.set_vflip(True) # 垂直方向翻转。根据实际摄像头模块的安装位置调整是否需要此操作
#!!!重要:不同摄像头是否需要镜像,根据实际情况定。如果不需要镜像,请注释掉以下代码:
sensor.set_hmirror(True) # 水平方向反转。根据实际摄像头模块的安装位置调整是否需要此操作
#!!!重要:不同摄像头是否需要镜像,根据实际情况定。如果不需要镜像,请注释掉上述代码。
#***************************如果不需要镜像就注释掉 上面 的代码********************
sensor.skip_frames(time=2000) # Wait for settings take effect. 等待2秒钟让设置生效
clock = time.clock() # Create a clock object to track the FPS. 创建一个时钟对象,用于追踪FPS(每秒帧数)
while True:
clock.tick() # Update the FPS clock. 更新FPS时钟
img = sensor.snapshot() # Take a picture and return the image. 拍摄一张照片并返回图像
print(clock.fps()) # 输出当前的帧率(FPS),用来衡量摄像头的拍摄速度
# Note: OpenMV Cam runs about half as fast when connected
# to the IDE. The FPS should increase once disconnected.
# 注意:当OpenMV相机连接到IDE时,速度大约是平时的一半。断开连接后,FPS应该会提高。
注意根据自己的摄像头和安装选择是否需要镜像图像。
下面是两个对比
如果摄像头的图像采集在缓冲区里面看到是水平和垂直方向都镜像的,那就说明需要开启镜像
摄像头开启镜像后这样采集的内容就正常了。
这个sensor.set_framesize(sensor.QVGA) 后面可以设置获取的图像大小。我们后面例程一般使用的是QQVGA
可以根据自己的摄像头、程序可以运行空间、处理需求设置。
3.2 - 循迹黑线或者红线
这里我们循线小车,由于电赛比赛经常出不同颜色的巡线要求,所以这里会讲解如何调整巡线阈值等方法,以及后面会讲解如何离线调整巡线阈值,可以更好的根据现场测评情况完成调试。
下面讲解循迹的功能有很大部分是我之前的 "STM32智能车V3 openmv循迹功能"重复的,如果想学习STM32底层电机驱动和PID串口等内容的可以看这里(16个多小时视频和七万字笔记的教程来讲解上面的问题): https://www.bilibili.com/video/BV16x4y1M7EN/?p=2&share_source=copy_web&vd_source=f5d5850ab773377dff308188468fbc77
3.2.1-感兴趣区域LAB识别+串行终端输出
功 能: Openmv循迹识别线
硬件要求: 好家伙VCC-OpenMV4 H7 Plus 或者 OpenMV4 H7、openMV串口转接板(方便接线的,也可以不用)。
摄像头五个口 是否识别出来黑线,通过openmv软件串行终端输出
这里演示循迹黑线,红线或者其他颜色的线也是一样的道理。
根据自己摄像头特点查看测试是否需要这两句 镜头反转的操作
# 注意是否有下面两句根据自己摄像头调整
sensor.set_vflip(True) #垂直方向翻转 根据自己摄像头和模块安装位置调整 !!!重要不同摄像头是否需要镜像根据实际情况定,如果不需要镜像需要注释掉
sensor.set_hmirror(True) #水平方向反转 根据自己摄像头和模块安装位置调整 !!!重要不同摄像头是否需要镜像根据实际情况定,如果不需要镜像需要注释掉
这里通过摄像头识别指定区域是否我们想要的阈值
通过roi来定指定区域
有一个技巧,手动设置阈值的时候
通过阈值编辑器设置阈值
阈值保持在变量这里
#最好根据自己情况设置一下!!!
GROUND_THRESHOLD=(0, 30, -22, 23, -128, 80)#阈值参数,用于在图像处理中对标物体进行颜色识别分割。在OpenMV IDE软件 工具->机器视觉->阈值编辑器->帧缓冲区 调整出要识别的LAB阈值。
然后为了方便观察openmv 板子程序是否在运行,我们增加对板载RGB灯 运动控制
led = pyb.LED(1) # led = pyb.LED(1)表示led表示红灯。各种状态如下:Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
led.on() #点亮红灯 板载红灯点亮表示程序得到执行
使用代码如下
import pyb, sensor, image, math, time
from pyb import UART
import ustruct
from image import SEARCH_EX, SEARCH_DS
import time
import sensor, lcd
#导入需要的库和模块
#使用中可能根据自己情况需要修改的值
#1. GROUND_THRESHOLD 阈值参数 通过工具->机器视觉->阈值编辑器->帧缓冲区 调整出要识别的LAB阈值。
#2.注意是否有下面两句根据自己摄像头调整
#sensor.set_vflip(True)
#sensor.set_hmirror(True)
#教程作者:好家伙VCC
#欢迎交流群QQ: 771027961 作者邮箱: 1930299709@qq.com
#更多教程B站主页:[好家伙VCC的个人空间-好家伙VCC个人主页-哔哩哔哩视频](https://space.bilibili.com/434192043)
#淘宝主页链接:[首页-好家伙VCC-淘宝网](https://shop415231378.taobao.com)
#更多嵌入式手把手教程-尽在好家伙VCC
#sensor.set_contrast(1)#设置相机图像对比度。-3至+3。
#sensor.set_gainceiling(16)#设置相机图像增益上限。2, 4, 8, 16, 32, 64, 128。
roi1 = [( 20, 105, 10, 10),
( 45, 105, 10, 10),
( 75, 105, 10, 10),
( 105, 105, 10, 10),
(130, 105, 10, 10)]#定义一个名为roi1的列表,其中包含了5个元组。每个元组代表了一个矩形感兴趣区域在图像上的位置和大小。
#具体而言,每个元组包含了4个数值依次的含义是:ROI左上角点的x坐标、ROI左上角点的y坐标、ROI的宽度、ROI的高度
led = pyb.LED(1) # led = pyb.LED(1)表示led表示红灯。各种状态如下:Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
led.on() #点亮红灯 板载红灯点亮表示程序得到执行
sensor.reset()#初始化相机传感器。
sensor.set_pixformat(sensor.RGB565)#设置相机模块的像素模式:sensor.RGB565: 16 bits/像素。
sensor.set_framesize(sensor.QQVGA)#设置图像分辨率、如果改变分辨率也要调整ROI区域。摄像头不同、应用场景不同可以选择不同分辨率。这里使用QQVGA可能画质很胡,但是为了兼容不同型号摄像头我们先使用QQVGA 不影响循迹效果
#***************************如果不需要镜像就注释掉 下面 的代码********************
# 设置摄像头镜像/翻转操作,根据摄像头安装的方向决定是否需要
sensor.set_vflip(True) # 垂直方向翻转。根据实际摄像头模块的安装位置调整是否需要此操作
#!!!重要:不同摄像头是否需要镜像,根据实际情况定。如果不需要镜像,请注释掉以下代码:
sensor.set_hmirror(True) # 水平方向反转。根据实际摄像头模块的安装位置调整是否需要此操作
#!!!重要:不同摄像头是否需要镜像,根据实际情况定。如果不需要镜像,请注释掉上述代码。
#***************************如果不需要镜像就注释掉 上面 的代码********************
sensor.skip_frames(time=2000)#跳过指定数目的帧。在这里,设置为跳过2000毫秒(即2秒)的帧。这样可以给传感器一些时间进行初始化和自适应调整。
sensor.set_auto_whitebal(True)#设置为自动白平衡模式。这使得摄像头可以根据场景中的光照条件自动调整图像的白平衡,从而保持图像色彩更加准确和自然。
sensor.set_auto_gain(False)#关闭自动增益模式。通常情况下,开启自动增益会帮助摄像头自动调整亮度,并在低亮度环境下提高图像清晰度。通过设置为False,禁用了这个功能,使用固定增益值。
#lcd.init() #初始化lcd屏幕
#最好根据自己情况设置一下!!!
GROUND_THRESHOLD=(0, 30, -22, 23, -128, 80)#阈值参数,用于在图像处理中对标物体进行颜色识别分割。在OpenMV IDE软件 工具->机器视觉->阈值编辑器->帧缓冲区 调整出要识别的LAB阈值。
while(True):
data=0
blob1=None
blob2=None
blob3=None
blob4=None
blob5=None
flag = [0,0,0,0,0]
img = sensor.snapshot().lens_corr(strength = 1.7 , zoom = 1.0)#对获取到的图像执行镜头校正的操作。
blob1 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[0])#在图像中通过颜色阈值 GROUND_THRESHOLD1 检测 roi1[0] 区域内的色块,并将检测结果赋值给 blob1。
blob2 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[1])#同理
blob3 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[2])
blob4 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[3])
blob5 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[4])
if blob1:#如果roi1区域内找到阈值色块 就会赋值flag[0]为1
flag[0] = 1
if blob2:
flag[1] = 1
if blob3:
flag[2] = 1
if blob4:
flag[3] = 1
if blob5:
flag[4] = 1
print(flag[0],flag[1],flag[2],flag[3],flag[4])#把数据打印在串行终端方便调试
for rec in roi1:#遍历所有感兴趣的区域roi1 并绘制color=(255,0,0)颜色
img.draw_rectangle(rec, color=(255,0,0))
#lcd.display(img) # Take a picture and display the image.#将图像显示在lcd中
识别过程