欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 《K230 从熟悉到...》圆形检测

《K230 从熟悉到...》圆形检测

2025/9/25 19:22:12 来源:https://blog.csdn.net/weixin_45020839/article/details/146642496  浏览:    关键词:《K230 从熟悉到...》圆形检测

《K230 从熟悉到...》圆形检测

  • 设定圆形检测,满足条件报警

《庐山派 K230 从熟悉到...》圆形检测

可以用来快速定位圆心与半径,可以用来检测圆环标记,交通标志等,也可以用于物体检测(如五子棋棋子定位)。
我们有了线段检测和矩形检测的基础后,圆形检测就很好整了。直接看效果

所使用API

find_circles

该函数使用霍夫变换在图像中查找圆形,并返回一个 image.circle 对象的列表。

在这里插入图片描述

import time, os, sysfrom media.sensor import *
from media.display import *
from media.media import *sensor = None
fps = time.clock()
try:sensor = Sensor()sensor.reset()sensor.set_framesize(width = 800, height = 480)sensor.set_pixformat(Sensor.YUV420SP)bind_info = sensor.bind_info()Display.bind_layer(**bind_info, layer = Display.LAYER_VIDEO1)# 通道2  320*240sensor.set_framesize(Sensor.QVGA, chn = CAM_CHN_ID_2)sensor.set_pixformat(Sensor.RGB565, chn = CAM_CHN_ID_2)Display.init(Display.ST7701)MediaManager.init()sensor.run()fps = time.clock()# 注意他们2个显示都不在一个层上面!!!while True:fps.tick()os.exitpoint()img = sensor.snapshot(chn = CAM_CHN_ID_2)circles = img.find_circles(threshold=4000)count = 0  # 初始化线段计数器print("------圆形统计开始------")for circle in circles:# 若想获取更详细的四个顶点,可使用 rect.corners(),该函数会返回一个有四个元祖的列表,每个元组代表圆形的四个顶点,从左上角开始,按照顺时针排序。img.draw_circle(circle.circle(), color=(1, 147, 230), thickness=3)  # 绘制线段print(f"Circle {count}: {circle}")  # 打印线段信息count += 1  # 更新计数器print("---------END---------")Display.show_image(img, x = 800-320, layer = Display.LAYER_OSD1)print(fps.fps())except KeyboardInterrupt as e:print("user stop: ", e)
except BaseException as e:print(f"Exception {e}")
finally:# sensor stop runif isinstance(sensor, Sensor):sensor.stop()# deinit displayDisplay.deinit()os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)time.sleep_ms(100)# release media bufferMediaManager.deinit()

image.circle

最后一个返回值就是之前说的索贝尔滤波像素
在这里插入图片描述
我们看第三个返回值 r 在列表中用[2]来查找
在这里插入图片描述

我们来看看添加的条件。当半径大于55,蜂鸣器响一下。很简单吧0 0。

设定圆形检测,满足条件报警

import time, os, sysfrom media.sensor import *
from media.display import *
from media.media import *
from machine import PWM, FPIOA
sensor = None
fps = time.clock()
# 配置蜂鸣器IO口功能
beep_io = FPIOA()
beep_io.set_function(43, FPIOA.PWM1)
beep_pwm = PWM(1, 4000, 50, enable=False)  # 默认频率4kHz,占空比50%
# 初始化蜂鸣器PWM通道try:sensor = Sensor()sensor.reset()sensor.set_framesize(width = 800, height = 480)sensor.set_pixformat(Sensor.YUV420SP)bind_info = sensor.bind_info()Display.bind_layer(**bind_info, layer = Display.LAYER_VIDEO1)# 通道2  320*240sensor.set_framesize(Sensor.QVGA, chn = CAM_CHN_ID_2)sensor.set_pixformat(Sensor.RGB565, chn = CAM_CHN_ID_2)Display.init(Display.ST7701)MediaManager.init()sensor.run()fps = time.clock()# 注意他们2个显示都不在一个层上面!!!while True:fps.tick()os.exitpoint()img = sensor.snapshot(chn = CAM_CHN_ID_2)circles = img.find_circles(threshold=3000)count = 0  # 初始化线段计数器print("------圆形统计开始------")for circle in circles:# 若想获取更详细的四个顶点,可使用 rect.corners(),该函数会返回一个有四个元祖的列表,每个元组代表圆形的四个顶点,从左上角开始,按照顺时针排序。img.draw_circle(circle.circle(), color=(1, 147, 230), thickness=3)  # 绘制线段if int(circle.circle()[2])>55:beep_pwm.enable(1)# 延时50mstime.sleep_ms(50)beep_pwm.enable(0)#print(f"Circle {count}: {circle}")  # 打印线段信息count += 1  # 更新计数器print("---------END---------")Display.show_image(img, x = 800-320, layer = Display.LAYER_OSD1)print(fps.fps())except KeyboardInterrupt as e:print("user stop: ", e)
except BaseException as e:print(f"Exception {e}")
finally:# sensor stop runif isinstance(sensor, Sensor):sensor.stop()# deinit displayDisplay.deinit()os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)time.sleep_ms(100)# release media bufferMediaManager.deinit()

线段检测和矩形检测一样可以用,哈。有了圆形检测的经验小伙伴可以回头去自己改一下。来看代码,关于蜂鸣器,小伙伴自行去查看。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词