圆形检测实验
前言
在上一章节中,已经了解了如何在CanMV下使用image模块实现线段检测的方法,本章将通过圆形检测实验,介绍如何使用CanMV的find_circles()方法实现圆形检测功能。在本实验中,我们将摄像头捕获的图像进行处理,查找图像中所有的圆形,并将结果绘制并显示到显示器上。通过本章的学习,读者将学习到如何在CanMV下使用find_circles()方法实现圆形检测的功能。
Image模块介绍
概述
Image 类是机器视觉处理中的基础对象。此类支持从Micropython GC、MMZ、系统堆、VB区域等内存区域创建图像对象。此外,还可以通过引用外部内存直接创建图像(ALLOC_REF)。未使用的图像对象会在垃圾回收时自动释放,也可以手动释放内存。
支持的图像格式如下:
- BINARY
- GRAYSCALE
- RGB565
- BAYER
- YUV422
- JPEG
- PNG
- ARGB8888(新增)
- RGB888(新增)
- RGBP888(新增)
- YUV420(新增)
支持的内存分配区域:
- ALLOC_MPGC:Micropython管理的内存
- ALLOC_HEAP:系统堆内存
- ALLOC_MMZ:多媒体内存
- ALLOC_VB:视频缓冲区
- ALLOC_REF:使用引用对象的内存,不分配新内存
API描述
Python中的Image模块是一个强大的图像处理工具,它提供了一系列函数和方法,可以用于图像元素绘制、图像滤波、图像特征检测、色块追踪、图像对比和码识别等。由于image模块功能强大,需要介绍的内容也比较多,因此本章仅介绍image模块中find_circles()方法的使用。
find_circles
image.find_circles([roi[, x_stride=2[, y_stride=1[, threshold=2000[, x_margin=10[, y_margin=10[, r_margin=10]]]]]]])
该函数使用霍夫变换在图像中查找圆形,并返回一个image.circle对象的列表。
【参数】
- roi:为感兴趣区域的矩形元组(x, y, w, h)。若未指定,ROI默认为整个图像的矩形。操作仅限于该区域内的像素。
- x_stride:为霍夫变换过程中需要跳过的x像素数量。如果已知圆较大,可增加x_stride。
- y_stride:为霍夫变换过程中需要跳过的y像素数量。如果已知圆较大,可增加y_stride。
- threshold:控制检测到的圆的大小,仅返回大于或等于该阈值的圆。合适的阈值取决于图像内容。请注意,圆的大小(magnitude)是构成圆的所有索贝尔滤波像素大小的总和。
- x_margin:为对x坐标进行合并时允许的最大像素偏差。
- y_margin:为对y坐标进行合并时允许的最大像素偏差。
- r_margin:为对半径进行合并时允许的最大像素偏差。
该方法通过在图像上应用索贝尔滤波器,并利用其幅值和梯度响应执行霍夫变换。无需对图像进行任何预处理,尽管图像的清理和过滤将会产生更为稳定的结果。
注意:此功能不支持压缩图像和Bayer图像。
更多用法请阅读官方API手册:
硬件设计
例程功能
- 获取摄像头输出的图像,并使用image模块的find_circles()方法查找图像上所有的圆形并绘制出来,最后将图像显示在LCD上。
硬件资源
- 本章实验内容,主要讲解image模块的使用,无需关注硬件资源。
原理图
本章实验内容,主要讲解image模块的使用,无需关注原理图。