news 2026/8/7 21:37:12

k230 Pyhton三角形识别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
k230 Pyhton三角形识别

本文介绍了一个基于K230 CanMV开发板的多颜色三角形识别程序,能够检测红、绿、蓝三种颜色的三角形。程序使用摄像头获取实时图像,通过LAB颜色阈值过滤识别特定颜色的色块,并判断是否为三角形(通过检测4个角点)。识别到的三角形会标注外接矩形、轮廓线、中心十字和颜色文字。程序支持LCD/HDMI/VIRT三种显示模式,具有完善的资源释放机制。该方案适用于K230 CanMV v1.2.2版本,可作为计算机视觉应用的开发参考。

# 立创·庐山派-K230-CanMV开发板 多颜色三角形识别(红/绿/蓝) # 适配K230 CanMV v1.2.2 import time, os, sys from media.sensor import * from media.display import * from media.media import * sensor_id = 2 sensor = None # 显示模式:LCD(开发板屏幕)/HDMI/VIRT(虚拟屏) DISPLAY_MODE = "LCD" # 显示分辨率配置 if DISPLAY_MODE == "VIRT": DISPLAY_WIDTH = ALIGN_UP(1920, 16) DISPLAY_HEIGHT = 1080 elif DISPLAY_MODE == "LCD": DISPLAY_WIDTH = 800 DISPLAY_HEIGHT = 480 elif DISPLAY_MODE == "HDMI": DISPLAY_WIDTH = 1920 DISPLAY_HEIGHT = 1080 else: raise ValueError("DISPLAY_MODE仅支持 'VIRT', 'LCD', 'HDMI'") # 红/绿/蓝 三色LAB阈值(全部启用,适配K230摄像头) # 格式:(L Min, L Max, A Min, A Max, B Min, B Max) color_thresholds = [ (46, 66, 14, 92, -29, 106), # 红色阈值(启用) (52, 88, -85, -6, -11, 91), # 绿色阈值 (47, 76, -35, 51, -83, -32) # 蓝色阈值 ] try: # 初始化摄像头(沿用稳定的初始化逻辑) sensor = Sensor(id=sensor_id) sensor.reset() sensor.set_framesize(width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, chn=CAM_CHN_ID_0) sensor.set_pixformat(Sensor.RGB565, chn=CAM_CHN_ID_0) # 初始化显示器 if DISPLAY_MODE == "VIRT": Display.init(Display.VIRT, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, fps=60) elif DISPLAY_MODE == "LCD": Display.init(Display.ST7701, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, to_ide=True) elif DISPLAY_MODE == "HDMI": Display.init(Display.LT9611, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, to_ide=True) MediaManager.init() sensor.run() print("K230多颜色三角形识别程序启动(红/绿/蓝),按Ctrl+C退出") while True: os.exitpoint() # 获取摄像头实时帧 img = sensor.snapshot(chn=CAM_CHN_ID_0) # 查找色块(过滤小噪声,面积>2000像素) blobs = img.find_blobs(color_thresholds, area_threshold=2000) if blobs: for blob in blobs: # 获取色块角点,判断是否为三角形(角点数量=3) corners = blob.corners() if len(corners) == 4: # 根据颜色索引确定识别到的颜色 color_flag = blob[8] if color_flag & 0x01: color_name = "red" draw_color = (255, 0, 0) # 红色RGB elif color_flag & 0x02: color_name = "green" draw_color = (0, 255, 0) # 绿色RGB elif color_flag & 0x04: color_name = "blue" draw_color = (0, 0, 255) # 蓝色RGB else: color_name = "unknown" draw_color = (128, 128, 128) # 灰色 # 1. 绘制三角形外接矩形(白色框) img.draw_rectangle(blob[0:4], color=(255, 255, 255), thickness=3) # 2. 绘制三角形轮廓(对应颜色线条,循环3次) for i in range(3): x1, y1 = corners[i] x2, y2 = corners[(i + 1) % 3] img.draw_line(x1, y1, x2, y2, color=draw_color, thickness=3) # 3. 绘制中心十字(黄色) img.draw_cross(blob[5], blob[6], color=(255, 255, 0), size=10) # 4. 标注三角形+颜色文字 img.draw_string(blob[0], blob[1]-20, f"Triangle: {color_name}", color=draw_color, scale=2, mono_space=False) # 5. 串口打印识别结果 print(f"识别到【{color_name}】三角形 - 中心坐标:X={blob[5]}, Y={blob[6]}") # 显示处理后的图像到屏幕 Display.show_image(img) except KeyboardInterrupt: print("\n用户手动终止程序") except BaseException as e: print(f"程序异常:{str(e)}") finally: # 释放硬件资源 if sensor: sensor.stop() Display.deinit() os.exitpoint(os.EXITPOINT_ENABLE_SLEEP) time.sleep_ms(100) MediaManager.deinit() print("程序退出,资源已释放")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 17:32:59

如何快速释放Windows磁盘空间:终极存储分析工具完整指南

您的Windows电脑是否经常提示"磁盘空间不足"?是否曾为寻找那些占用大量空间的神秘文件而烦恼?今天就为您介绍一款能够彻底解决这些问题的专业磁盘管理工具,让您轻松掌握磁盘使用情况,快速释放宝贵空间。 【免费下载链接…

作者头像 李华
网站建设 2026/8/6 18:21:19

ComfyUI与Redis缓存集成:加速大规模生成任务

ComfyUI与Redis缓存集成:加速大规模生成任务 在AI内容生成从“能用”迈向“好用、高效、可量产”的今天,一个看似不起眼的技术组合正在悄然改变工作流的运行效率——ComfyUI 与 Redis 的深度集成。当可视化节点图遇见内存级缓存系统,原本耗时…

作者头像 李华
网站建设 2026/8/6 12:03:51

HunyuanVideo-Foley离线版发布:支持内网部署与私有化音效生成

HunyuanVideo-Foley离线版发布:支持内网部署与私有化音效生成 在影视后期、短视频工厂乃至军事仿真系统中,一段精准的脚步声可能比画面本身更能传递紧张氛围。然而长期以来,这类细节音效的制作始终依赖人工“Foley录音”——演员在录音棚里模…

作者头像 李华
网站建设 2026/8/6 6:39:59

ComfyUI工作流整合Stable Diffusion 3.5 FP8:实现批量生成高效输出

ComfyUI工作流整合Stable Diffusion 3.5 FP8:实现批量生成高效输出 在AIGC内容生产逐渐从“创意实验”迈向“工业流水线”的今天,一个核心挑战日益凸显:如何在不牺牲图像质量的前提下,让像Stable Diffusion这样的大模型跑得更快、…

作者头像 李华
网站建设 2026/8/6 23:59:28

10、Z变换:原理、计算与应用详解

Z变换:原理、计算与应用详解 1. 引言 在信号处理应用中,拉普拉斯变换和傅里叶变换起着重要作用,它们分别定义在连续时间域和离散时间域。在实际信号处理里,我们更多使用的是傅里叶变换和拉普拉斯变换的离散版本,即离散时间傅里叶变换、离散傅里叶变换以及更为常用的Z变换…

作者头像 李华
网站建设 2026/8/6 21:15:45

17、FIR和IIR滤波器的结构与实现

FIR和IIR滤波器的结构与实现 1. FIR滤波器的快速卷积形式 FIR滤波器的快速卷积形式是一种高效的实现方法。其基本步骤如下: 1. 将输入序列分段成块。 2. 对每个块进行快速傅里叶变换(FFT)。 3. 对滤波器系数 (h(n)) 进行快速傅里叶变换。 4. 将每个块的FFT结果 (X_i(k…

作者头像 李华