【CanMV K230】圆形检测
- 什么是圆形检测
- 圆形检测应用领域
- 1.工业自动化
- 2.机器人视觉
- 3.医学图像分析
- 4.目标识别
- 5.质量检测
- 6.研究和开发
- K230应用
- 相关函数
- 官方例程
- HDMI屏幕使用圆形检测
本篇内容:
- 什么是圆形检测
- 圆形检测应用领域
- K230应用(包含相应函数及例程)
B站视频链接:已做成合集 (求去点赞,或者发个弹幕也行呀。C友)
抖音链接:已做成合集(求去点赞,或者发个弹幕也行呀。C友)
什么是圆形检测
圆形检测是计算机视觉和图像处理中的一个常见任务,主要用于识别图像中的圆形物体
圆形检测应用领域
1.工业自动化
在工业生产中,圆形检测用于识别和定位圆形物体,如轴承、齿轮、管道等。这对于质量控制和自动化装配线至关重要。
2.机器人视觉
机器人视觉系统中的圆形检测可以帮助机器人识别和处理圆形物体,这对于导航、物体操纵和环境交互等功能非常重要。
3.医学图像分析
在医学领域,圆形检测用于分析X光、CT或MRI图像中的圆形结构,如肿瘤、囊肿或其他病理变化。
4.目标识别
圆形检测算法可以用于监控系统中,识别和跟踪圆形目标,如车辆、人脸或其他特定的圆形标记。
5.质量检测
在制造过程中,圆形检测用于确保产品的尺寸和形状符合标准,这对于提高产品质量和一致性至关重要。
6.研究和开发
在科学研究和新技术开发中,圆形检测可以作为一种工具来分析实验数据或开发新的检测算法。
K230应用
相关函数
find_circles对象
构造函数
image.find_circles([roi[, x_stride=2[, y_stride=1[, threshold=2000[, x_margin=10[, y_margin=10
[, r_margin=10[, r_min=2[, r_max[, r_step=2]]]]]]]]]])
找圆函数。返回一个image.circle圆形对象,该圆形对象有4个值: x, y(圆心), r (半径)和magnitude(量级);量级越大说明识别到的圆可信度越高。
参数 | 说明 |
---|---|
roi | 识别区域(x,y,w,h),未指定则默认整张图片。 |
threshold | 阈值。返回大于或等于threshold的圆,调整识别可信度。 |
x_stride y_stride | 霍夫变换时跳过x,y像素的量; |
x_margin y_margin r_margin | 控制所检测圆的合并; |
r_min r_max: | 控制识别圆形的半径范围; |
r_step | 控制识别步骤。 |
使用方法
直接调用该函数。(大部分参数使用默认即可,不支持压缩图像和bayer图像)
官方例程
'''
实验名称:圆形检测
实验平台:01Studio CanMV K230
教程:wiki.01studio.cc
说明:推荐使用320x240以下分辨率,分辨率过大会导致帧率下降。
'''
import time, os, sys
from media.sensor import * #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入media模块,使用meida相关接口
try:
sensor = Sensor(width=1280, height=960) #构建摄像头对象,将摄像头长宽设置为4:3
sensor.reset() #复位和初始化摄像头
sensor.set_framesize(width=320, height=240) #设置帧大小,默认通道0
sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道0
Display.init(Display.ST7701, to_ide=True) #同时使用3.5寸mipi屏和IDE缓冲区显示图像,800x480分辨率
#Display.init(Display.VIRT, sensor.width(), sensor.height()) #只使用IDE缓冲区显示图像
MediaManager.init() #初始化media资源管理器
sensor.run() #启动sensor
clock = time.clock()
while True:
os.exitpoint() #检测IDE中断
################
## 这里编写代码 ##
################
clock.tick()
img = sensor.snapshot() #拍摄一张图片
# 圆形类有 4 个参数值: 圆心(x, y), r (半径)和 magnitude(量级);
# 量级越大说明识别到的圆可信度越高。
# `threshold` 参数控制找到圆的数量,数值的提升会降低识别圆形的总数。
# `x_margin`, `y_margin`, and `r_margin`控制检测到接近圆的合并调节.
# r_min, r_max, and r_step 用于指定测试圆的半径范围。
for c in img.find_circles(threshold = 2000, x_margin = 10, y_margin= 10,
r_margin = 10,r_min = 2, r_max = 100, r_step = 2):
#画红色圆做指示
img.draw_circle(c.x(), c.y(), c.r(), color = (255, 0, 0),thickness=2)
print(c) #打印圆形的信息
#Display.show_image(img) #显示图片
#显示图片,仅用于LCD居中方式显示
Display.show_image(img, x=round((800-sensor.width())/2),y=round((480-sensor.height())/2))
print(clock.fps()) #打印FPS
###################
# IDE中断释放资源代码
###################
except KeyboardInterrupt as e:
print("user stop: ", e)
except BaseException as e:
print(f"Exception {e}")
finally:
# sensor stop run
if isinstance(sensor, Sensor):
sensor.stop()
# deinit display
Display.deinit()
os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
time.sleep_ms(100)
# release media buffer
MediaManager.deinit()
HDMI屏幕使用圆形检测
'''
实验名称:圆形检测测试
实验平台:01Studio CanMV K230
说明:实现图像在HDMI显示器进行圆形检测
测试人:咸鱼浆 2024年9月6日21:02:15
'''
import time, os, sys
from media.sensor import * #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入media模块,使用meida相关接口
try:
sensor = Sensor(width=1280, height=960) #构建摄像头对象,将摄像头长宽设置为4:3
sensor.reset() #复位和初始化摄像头
sensor.set_framesize(width=640, height=480) #设置帧大小为(width=640, height=480)太大了就显示不出来了,默认通道0
sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道0
#使用IDE缓冲区输出图像,显示尺寸和sensor配置一致。
Display.init(Display.LT9611, to_ide=True)
MediaManager.init() #初始化media资源管理器
sensor.run() #启动sensor
while True:
os.exitpoint() #检测IDE中断
################
## 这里编写代码 ##
################
img = sensor.snapshot() #拍摄一张图
# 圆形类有 4 个参数值: 圆心(x, y), r (半径)和 magnitude(量级);
# 量级越大说明识别到的圆可信度越高。
# `threshold` 参数控制找到圆的数量,数值的提升会降低识别圆形的总数。
# `x_margin`, `y_margin`, and `r_margin`控制检测到接近圆的合并调节.
# r_min, r_max, and r_step 用于指定测试圆的半径范围。
for c in img.find_circles(threshold = 3000, x_margin = 10, y_margin= 10,
r_margin = 10,r_min = 2, r_max = 100, r_step = 2):
#画红色圆做指示
img.draw_circle(c.x(), c.y(), c.r(), color = (255, 0, 0),thickness=2)
print(c) #打印圆形的信息
Display.show_image(img, x=round((1920-sensor.width())/2),y=round((1080-sensor.height())/2))
#Display.show_image(img) #显示图片
###################
# IDE中断释放资源代码
###################
except KeyboardInterrupt as e:
print("user stop: ", e)
except BaseException as e:
print(f"Exception {e}")
finally:
# sensor stop run
if isinstance(sensor, Sensor):
sensor.stop()
# deinit display
Display.deinit()
os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
time.sleep_ms(100)
# release media buffer
MediaManager.deinit()