• 【STM32+OPENMV】矩形识别


    一、准备工作

    有关OPENMV最大色块追踪及与STM32通信内容,详情见【STM32+HAL】与OpenMV通信

    二、所用工具

    1、芯片:STM32F103C8T6

    2、CUBEMX配置软件

    3、KEIL5

    4、OPENMV

    三、实现功能

    寻找黑色矩形,并将最大矩形的四个边缘坐标发送给STM32

    四、OpenMV  IDE

    1、寻找最大的矩形,并沿矩形边框绘制线条
    1. # 寻找最大的矩形
    2. # 沿矩形边框绘制线条
    3. import sensor, image, time
    4. # 相机初始化
    5. sensor.reset()
    6. sensor.set_pixformat(sensor.GRAYSCALE) # 设置图像格式为灰度
    7. sensor.set_framesize(sensor.QQQVGA) # 设置图像大小
    8. sensor.skip_frames(time=2000) # 等待设置生效
    9. clock = time.clock() # 用于跟踪帧率
    10. while(True):
    11. clock.tick()
    12. img = sensor.snapshot().lens_corr(1.8)
    13. # 使用find_rects()方法寻找图像中的矩形
    14. rects = img.find_rects(threshold = 10000)
    15. # 初始化变量来存储最大矩形的信息
    16. max_area = 0
    17. max_rect = None
    18. # 遍历所有找到的矩形,找出面积最大的矩形
    19. for rect in rects:
    20. # 计算当前矩形的面积
    21. area = rect.w() * rect.h()
    22. # 如果当前矩形的面积大于之前记录的最大面积,则更新最大矩形和最大面积
    23. if area > max_area:
    24. max_area = area
    25. max_rect = rect
    26. # 如果找到了最大的矩形,则绘制它的边框
    27. if max_rect:
    28. corners = max_rect.corners() # 获取最大矩形的四个角点
    29. # 绘制最大矩形的四条边
    30. for i in range(len(corners)):
    31. start_point = corners[i]
    32. end_point = corners[(i+1) % 4]
    33. img.draw_line(start_point[0], start_point[1], end_point[0], end_point[1], color = 255)
    34. print(corners) # 打印最大矩形的四个角点

    2、完整通信+识别代码
    1. # 寻找最大的矩形
    2. # 沿矩形边框绘制线条
    3. import sensor, image, time
    4. import ustruct
    5. from pyb import UART
    6. # 串口初始化
    7. uart = UART(3, 115200, timeout_char=200)
    8. uart.init(115200, bits=8, parity=None, stop=1) # init with given parameters
    9. # 相机初始化
    10. sensor.reset()
    11. sensor.set_pixformat(sensor.GRAYSCALE) # 设置图像格式为灰度
    12. sensor.set_framesize(sensor.QQQVGA) # 设置图像大小
    13. sensor.skip_frames(time=2000) # 等待设置生效
    14. clock = time.clock() # 用于跟踪帧率
    15. def send_data(x):
    16. global uart;
    17. uart.write(bytearray([0xb3,0xb3]))
    18. uart.write(str(x))
    19. uart.write(bytearray([0x0d,0x0a]))
    20. while(True):
    21. clock.tick()
    22. img = sensor.snapshot().lens_corr(1.8)
    23. # 使用find_rects()方法寻找图像中的矩形
    24. rects = img.find_rects(threshold = 10000)
    25. # 初始化变量来存储最大矩形的信息
    26. max_area = 0
    27. max_rect = None
    28. # 遍历所有找到的矩形,找出面积最大的矩形
    29. for rect in rects:
    30. # 计算当前矩形的面积
    31. area = rect.w() * rect.h()
    32. # 如果当前矩形的面积大于之前记录的最大面积,则更新最大矩形和最大面积
    33. if area > max_area:
    34. max_area = area
    35. max_rect = rect
    36. # 如果找到了最大的矩形,则绘制它的边框
    37. if max_rect:
    38. corners = max_rect.corners() # 获取最大矩形的四个角点
    39. # 绘制最大矩形的四条边
    40. for i in range(len(corners)):
    41. start_point = corners[i]
    42. end_point = corners[(i+1) % 4]
    43. img.draw_line(start_point[0], start_point[1], end_point[0], end_point[1], color = 255)
    44. send_data(corners)
    45. print(corners) # 打印最大矩形的四个角点

    五、源码提供

    【STM32+OPENMV】矩形识别资源

  • 相关阅读:
    基于神经网络的自动驾驶,人工智能在无人驾驶
    【译】A unit of profiling makes the allocations go away
    二叉树与递归问题
    Vulnhub靶机:TOMATO_ 1
    ABC-270 F - Transportation(kruskal)
    云原生--k8s之yaml与json
    1011 World Cup Betting
    音视频开发之重拾图片
    常用函数(睡眠函数、函数耗时)
    闲暇之际敲敲代码,记录Leetcode刷题Day-01
  • 原文地址:https://blog.csdn.net/m0_60372743/article/details/136545891