0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第19.2章-星曈科技 openmv H7 plus openmv视觉循迹功能-完成视觉识别指定区域 OpenMV视觉模块循迹 STM32F103C8T6视觉巡线

dfhjgfg 来源:dfhjgfg 作者:dfhjgfg 2024-08-20 11:28 次阅读
**功能介绍放开头, 使用便捷无需愁**

**这是全网最详细、性价比最高的STM32实战项目入门教程,通过合理的硬件设计和详细的视频笔记介绍,硬件使用STM32F103主控资料多方便学习,通过3万字笔记、12多个小时视频、20多章节代码手把手教会你如何开发和调试。让你更快掌握嵌入式系统开发。**

**V3.3.0-STM32智能小车 **

**视频: **[https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click]

**V3:HAL库开发、功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、视觉控制、电磁循迹、RTOS等功能。**

## 19.2-openmv视觉循迹功能-完成视觉识别指定区域

**功 能: Openmv循迹识别线**

**硬件要求: OpenMV4 H7 Plus 或者 OpenMV4 H7、openMV串口转接板(方便接线的,也可以不用)。**

**摄像头五个口 是否识别出来黑线,通过openmv软件串行终端输出**
![在这里插入图片描述](//file1.elecfans.com/web2/M00/03/DF/wKgaoma-1vWAX-2kAAU1Im5boYw941.png)
**根据自己摄像头特点查看测试是否需要这两句 镜头反转的操作 **

```
# 注意是否有下面两句根据自己摄像头调整
sensor.set_vflip(True)  #垂直方向翻转 根据自己摄像头和模块安装位置调整 !!!重要不同摄像头是否需要镜像根据实际情况定,如果不需要镜像需要注释掉
sensor.set_hmirror(True) #水平方向反转 根据自己摄像头和模块安装位置调整 !!!重要不同摄像头是否需要镜像根据实际情况定,如果不需要镜像需要注释掉
```

**这里通过摄像头识别指定区域是否我们想要的阈值**

**通过roi来定指定区域 **
![在这里插入图片描述](//file1.elecfans.com/web2/M00/03/DF/wKgaoma-1vWASTJOAAJIxKQSSPE529.png)
**通过阈值编辑器设置阈值**
![在这里插入图片描述](//file1.elecfans.com/web2/M00/02/F3/wKgZoma-1vWAKVQVAASw-07SFBo034.png)
![在这里插入图片描述](//file1.elecfans.com/web2/M00/02/F3/wKgZoma-1vWAH4EFAAFkDsrru38135.png)
![在这里插入图片描述](//file1.elecfans.com/web2/M00/02/F3/wKgZoma-1vWAd8UIAASrw6XHixs610.png)
**阈值保持在变量这里**

```
#最好根据自己情况设置一下!!!
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)


#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.skip_frames(time=2000)#跳过指定数目的帧。在这里,设置为跳过2000毫秒(即2秒)的帧。这样可以给传感器一些时间进行初始化和自适应调整。
sensor.set_auto_whitebal(True)#设置为自动白平衡模式。这使得摄像头可以根据场景中的光照条件自动调整图像的白平衡,从而保持图像色彩更加准确和自然。
sensor.set_auto_gain(False)#关闭自动增益模式。通常情况下,开启自动增益会帮助摄像头自动调整亮度,并在低亮度环境下提高图像清晰度。通过设置为False,禁用了这个功能,使用固定增益值。

# 注意是否有下面两句根据自己摄像头调整
sensor.set_vflip(True)  #垂直方向翻转 根据自己摄像头和模块安装位置调整 !!!重要不同摄像头是否需要镜像根据实际情况定,如果不需要镜像需要注释掉
sensor.set_hmirror(True) #水平方向反转 根据自己摄像头和模块安装位置调整 !!!重要不同摄像头是否需要镜像根据实际情况定,如果不需要镜像需要注释掉


#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中

```

** 识别过程**
![在这里插入图片描述](//file1.elecfans.com/web2/M00/03/DF/wKgaoma-1vWATc0IAAR-f9Pnr9k233.png)

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 视觉识别
    +关注

    关注

    3

    文章

    89

    浏览量

    16659
  • STM32F103C8T6
    +关注

    关注

    106

    文章

    160

    浏览量

    82997
  • 智能寻迹
    +关注

    关注

    0

    文章

    3

    浏览量

    1094
  • openMV
    +关注

    关注

    3

    文章

    39

    浏览量

    9779
收藏 人收藏

    评论

    相关推荐

    19.1 -瞳科技 OpenMV视觉循迹功能 超详细OpenMVSTM32单片机通信

    19.1 -[瞳科技]OpenMV视觉循迹功能
    的头像 发表于 08-20 11:41 767次阅读
    <b class='flag-5'>第</b>19.1 <b class='flag-5'>章</b>-<b class='flag-5'>星</b>瞳科技 <b class='flag-5'>OpenMV</b><b class='flag-5'>视觉</b><b class='flag-5'>循迹</b><b class='flag-5'>功能</b> 超详细<b class='flag-5'>OpenMV</b>与<b class='flag-5'>STM32</b>单片机通信

    19.3-科技 openmv Hopenmv发送五个uchar Openmv+STM32F103C8T6视觉线小车 STM32循迹小车系列教程

    19.3-【科技】openmv Hopenmv发送五个uchar Openmv+STM32F103C8T6视觉
    的头像 发表于 08-20 11:32 725次阅读
    19.3-<b class='flag-5'>星</b><b class='flag-5'>曈</b>科技 <b class='flag-5'>openmv</b> Hopenmv发送五个uchar <b class='flag-5'>Openmv+STM32F103C8T6</b><b class='flag-5'>视觉</b><b class='flag-5'>巡</b><b class='flag-5'>线</b>小车 <b class='flag-5'>STM32</b><b class='flag-5'>循迹</b>小车系列教程

    19.4-STM32接收数据-状态显示在屏幕 openMV寻迹与小车控制 Openmv+STM32F103C8T6视觉线小车

    19.4-STM32接收数据-状态显示在屏幕 openMV寻迹与小车控制 Openmv+STM32F103C8T6视觉
    的头像 发表于 08-20 11:12 707次阅读
    19.4-<b class='flag-5'>STM32</b>接收数据-状态显示在屏幕 <b class='flag-5'>openMV</b>寻迹与小车控制 <b class='flag-5'>Openmv+STM32F103C8T6</b><b class='flag-5'>视觉</b><b class='flag-5'>巡</b><b class='flag-5'>线</b>小车

    【国外开源】STM32 机器人视觉摄像机OpenMV Cam设计(硬件+固件源码等)

    OpenMV项目旨在通过开发开源的低成本机器视觉摄像机,为业余爱好者和制造商提供机器视觉。第一代OpenMV摄像机基于STM32F ARM
    发表于 09-29 14:49

    视觉模块OpenMV浅说LED灯

    视觉模块OpenMV浅说LED灯,讲在开头的话:最初接触到OpenMV这款视觉模块是参加了一个学
    发表于 07-20 06:59

    OpenmvStm32f407通信入门

    的是stm32h7,用的串口为串口3。控制板是stm32f407zgt6,用的串口是串口2。目的是将openmv的数据通过串口传到控制板并在oled上面显示。大概思路两个单片机用串口通信,必须把自己的串口
    发表于 08-04 07:36

    介绍机器视觉模块OpenMV-RT初体验

     本系列痞子衡给大家介绍的是机器视觉模块OpenMV-RT初体验。  近些年机器视觉应用一直是个很火的方向,想象一下机器如果能长上“眼睛”,是不是就可以做一些人类才能做的事情,因此机器
    发表于 12-23 06:02

    基于OPENMVSTM32识别追踪小车设计实现

    STM32为控制器的寻物小车,不多说,直接进入正题!材料准备小车底盘直流减速电机杜邦线若干7.2V电源L298N模块STM32F407最小系统OPE
    发表于 02-25 06:21

    STM32F7691开发套件能用openMV实现视觉识别吗?

    请问选择了AI方向,选用的是STM32F7691开发套件,能用openMV实现视觉识别吗,还是必须在板子上用F769NI芯片实现
    发表于 08-07 06:26

    openMV摄像头循迹小车

    主控MSP430F5529,电机驱动模块L298N,openMV摄像头一、总体思路使用openMV线性回归,然后使用pid输出,使用串口发送到MSP430,在经过处理输出PWM到车轮,
    发表于 12-16 16:56 52次下载
    <b class='flag-5'>openMV</b>摄像头<b class='flag-5'>循迹</b>小车

    STM32openmv通信(HAL库)

    坐标发给32(为了 调试,顺便将32收到的数据传给上位机)实验所需:openmvSTM32F103ZET6(正点原子)一、openmv程序编写# Untitled - By:阿布 - 周日
    发表于 12-24 19:16 23次下载
    <b class='flag-5'>STM32</b>与<b class='flag-5'>openmv</b>通信(HAL库)

    openmv4系列1----基本认知

    openmv4系列1----基本认知1.openmv的由来  OpenMV是一个开源,低成本,功能强大的机器视觉
    发表于 12-29 18:51 8次下载
    <b class='flag-5'>openmv</b>4系列1----基本认知

    OPENMVSTM32识别追踪小车(详细版)之OPENMV

    STM32为控制器的寻物小车,不多说,直接进入正题!材料准备小车底盘直流减速电机杜邦线若干7.2V电源L298N模块STM32F407最小系统OPE
    发表于 01-13 12:05 0次下载
    <b class='flag-5'>OPENMV</b>和<b class='flag-5'>STM32</b>的<b class='flag-5'>识别</b>追踪小车(详细版)之<b class='flag-5'>OPENMV</b>端

    openmv cam H7官方电路图免费

    openmv cam H7 P官方电路图免费下载。
    发表于 04-24 10:06 39次下载

    OpenMV初识

    在嵌入式端进行python开发。OpenMV基于32位,ARM Cortex-M7内核的OpenMV-H7, 并结合各种摄像头,可以进行多种机器视觉应用的实现,比如人脸检测,物体分类等
    的头像 发表于 06-12 11:23 3702次阅读
    <b class='flag-5'>OpenMV</b>初识