OPENMV图像识别,通过串口发送到MSP432

一、OPENMV部分

1.导入所需要的模块 

import sensor, image, time, pyb

        sensor :感光模块

        image : 模块包含了处理图像的函数和类。这个模块提供了一系列的图像处理功能,包括但不限于图像过滤、特征检测、颜色识别、条形码识别等。通过这个模块,你可以对捕获的图像进行分析和修.

        time :模块提供了时间相关的函数。这个模块可以用于执行延时操作(如等待一定时间),或者获取当前时间

        pyb :模块是MicroPython的一部分,专为微控制器设计。它提供了访问和控制微控制器硬件的接口,如GPIO(通用输入输出)引脚、UART(通用异步接收/发送)通信、I2C、SPI等。通过pyb模块,你可以控制OpenMV上的LED灯、读取外部传感器、与其他硬件设备进行通信等。

2,初始化

        串口 
uart = pyb.UART(3, 115200, timeout_char=1000)

pyb.uart 函数返回值是一个对象,这个对象包含了UART端口的所有功能,包括数据发送、接收数据、配置等等,因此uart相当于一个串口,可以调用函数并控制串口3

pyb.uart(3 ,115200 ,timeout_char=1000)

 参数一、3 : 串口端号;

 参数二、115200 :串口通讯的波特率

 参数三、time_char:字符超时时间,单位为us(微秒是秒的负六次方),如果在设定的时间内没有新的字符接收,则认为接收结束,并返回已接收的数据 

         摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_auto_gain(False)  # must be turned off for color tracking
sensor.set_auto_whitebal(False)
sensor.skip_frames(time=2000)

 sensor.reset():

        重置摄像头为默认状态

sensor.set_pixformat(sensor.RGB565):

        设置像素格式

sensor.set_framesize(sensor.QVGA):

        设置摄像头捕获图像大小,QVGA是一种分辨率240x320

sensor.set_auto_gain(False):

       关闭自动增益控制。增益控制会根据图像的亮度自动调整摄像头的感光度。在进行颜色追踪时,通常需要关闭自动增益,以保持颜色的一致性。

 sensor.set_auto_whitebal(False)

        关闭自动白平衡。白平衡是摄像头根据不同光源调整颜色温度的过程。关闭自动白平衡是为了防止摄像头在追踪颜色时自动调整颜色设置,这样可以保持颜色的稳定性。

sensor.skip_frames(time=2000)

在设置完摄像头后,跳过一段时间内的帧。这里time=2000表示摄像头将跳过大约2000毫秒(2秒)的帧,这样做是为了让摄像头有时间适应光线条件和新的设置,尤其是在关闭了自动增益和自动白平衡之后。

        颜色阈值 OPENMVIDE中有调整阈值的工具

red_threshold = (16, 69, 69, 23, 23, 71)
green_threshold = (27, 56, -68, -6, 19, 47)
blue_threshold = (5, 93, 26, -58, -17, -89)

 

while(True):
    img = sensor.snapshot()


    # 查找红色对象
    for blob in img.find_blobs([red_threshold], pixels_threshold=100, area_threshold=100, merge=True):
        img.draw_rectangle(blob.rect())
        img.draw_cross(blob.cx(), blob.cy())
        uart.write('Red')

    # 查找绿色对象
    for blob in img.find_blobs([green_threshold], pixels_threshold=100, area_threshold=100, merge=True):
        img.draw_rectangle(blob.rect())
        img.draw_cross(blob.cx(), blob.cy())
        uart.write('Green')

    # 查找蓝色对象
    for blob in img.find_blobs([blue_threshold], pixels_threshold=100, area_threshold=100, merge=True):
        img.draw_rectangle(blob.rect())
        img.draw_cross(blob.cx(), blob.cy())
        uart.write('Blue')

img = sensor.snapshot()

        在while前先用snapshot()函数获取当前摄像头所捕获的一帧图像,并返回一个图像对象。这个图像对象可以用于后续的图像处理任务,如图像分析、特征检测、颜色追踪等。 

        img是snapshot的返回值,也就是图片对象

 

 for blob in img.find_blobs([red_threshold], pixels_threshold=100, area_threshold=100, merge=True):
        img.draw_rectangle(blob.rect())
        img.draw_cross(blob.cx(), blob.cy())
        uart.write('Red')

img.find_blobs()

   函数用于在图像中寻找颜色阈值内的区域(blobs)。这个函数的返回值是一个列表,列表中的每个元素都是一个Blob对象。

每个Blob对象包含了关于检测到的颜色区域的信息,例如:

  x 和 y:Blob在图像中的位置坐标。

  w 和 h:Blob的宽度和高度。

  pixels:Blob中的像素数量。

  cx 和 cy:Blob的质心(中心)坐标。

  rotation():Blob的旋转角度。

  code():Blob的颜色阈值编码。

  rect():Blob的矩形边界。

        这个列表可以是空的,如果在图像中没有找到任何匹配的颜色区域。如果找到了匹配的区域,列表中将包含一个或多个Blob对象,每个对象代表图像中的一个颜色区域。       

mg.draw_rectangle(blob.rect())

   img.draw_rectangle() 函数在图像上绘制一个矩形,矩形的位置和大小由 

    blob.rect() 返回的矩形参数决定。这个矩形框出了检测到的blob。

img.draw_cross(blob.cx(), blob.cy())

   img.draw_cross() 函数在图像上绘制一个十字形标记,其位置由blob的中心坐标

        (blob.cx()blob.cy())指定。这个十字形标记了blob的中心点。

uart.write('string')用串口3发送字符串

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值