当前位置: 首页 > news >正文

《K230 从熟悉到...》颜色识别

《K230 从熟悉到...》颜色识别

  • 颜色识别的基本原理

《庐山派 K230 从熟悉到...》颜色识别

颜色识别是计算机视觉中的重要组件,它允许算法在图像中检测、识别和分类不同颜色。
请添加图片描述
在这里插入图片描述

颜色识别的基本原理

颜色识别的核心是通过分析图像中像素点的颜色信息,从中找到符合特定颜色范围的区域。这个过程一般有以下几个步骤:

获取图像:通过摄像头捕获一帧画面,转换成数字信号,供算法处理。
颜色空间转换:将图像从默认的颜色空间(一般是RGB)转换到适合分析的颜色空间(本节是LAB)。
阈值匹配:根据预先设定的颜色范围,筛选出符合条件的像素。
区域分析:将相邻的符合条件的像素组合成“区域”(Blob),并提取区域的特征(比如位置、大小、形状等)。
标记与输出:对识别出的区域进行标记,并输出相关信息。
在庐山派中,步骤2-4可以是由内置的图像处理库自动完成,我们只需定义颜色的阈值范围,并调用相关函数就可以完成颜色识别。

LAB是一种基于人眼感知设计的颜色表示方式,由三个通道组成:

  • L通道:表示亮度,范围从黑到白,0表示黑,100表示白。
  • A通道:表示从绿色到红色的颜色范围,范围是-128到127。负值靠近绿色,正值靠近红色。
  • B通道:表示从蓝色到黄色的颜色范围,范围是-128到127,负值靠近蓝色,正值靠近黄色。

加粗样式

find_blobs(寻找图像中色块)
image.find_circles([roi[, x_stride=2[, y_stride=1[, threshold=2000[, x_margin=10[, y_margin=10[, r_margin=10]]]]]]])

参数 thresholds 必须为元组列表,形式为 [(lo, hi), (lo, hi), …],用于定义需要追踪的颜色范围。

  • 对于灰度图像,每个元组应包含两个值:最小灰度值和最大灰度值。函数将仅考虑落在这些阈值之间的像素区域。
  • 对于 RGB565 图像(彩色图像),每个元组需要包含六个值 (l_lo, l_hi, a_lo, a_hi, b_lo, b_hi),分别对应 LAB 色彩空间中的 L、A 和 B 通道的最小和最大值。该函数会自动纠正最小值和最大值的交换情况。如果元组包含超过六个值,则其余值将被忽略;若元组不足,则假定缺失的阈值为最大范围。
    在这里插入图片描述
import time, os, sys

from media.sensor import *
from media.display import *
from media.media import *

sensor = None
fps = time.clock()
try:


    # 指定颜色阈值
    # 格式:[min_L, max_L, min_A, max_A, min_B, max_B]
    color_threshold = [(0, 79, 31, 67, 26, 60)]
    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*240
    sensor.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)
         blobs = img.find_blobs(color_threshold,area_threshold = 2000)

        # 如果检测到颜色块
        if blobs:
            # 遍历每个检测到的颜色块
            for blob in blobs:
                # 绘制颜色块的外接矩形
                # blob[0:4] 表示颜色块的矩形框 [x, y, w, h],
                img.draw_rectangle(blob[0:4])

                # 在颜色块的中心绘制一个十字
                # blob[5] 和 blob[6] 分别是颜色块的中心坐标 (cx, cy)
                img.draw_cross(blob[5], blob[6])

                # 在控制台输出颜色块的中心坐标
                print("Blob Center: X={}, Y={}".format(blob[5], blob[6]))
        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 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()
http://www.dtcms.com/a/107803.html

相关文章:

  • 归并排序延伸-非递归版本
  • 基于yolo11的BGA图像目标检测
  • Ubuntu18.04 编译 Android7.1代码报错
  • 使用numpy读取数据集
  • Ubuntu Wayland启动腾讯会议并实现原生屏幕共享
  • JS—页面渲染:1分钟掌握页面渲染过程
  • C语言实现排序
  • spring-ai-alibaba第六章阿里dashscope集成mcp百度翻译tools
  • Java 大视界 -- Java 大数据在智慧文旅虚拟场景构建与沉浸式体验增强中的技术支撑(168)
  • STM32F103_LL库+寄存器学习笔记14 - CAN发送完成中断
  • 【小兔鲜】day02 Pinia、项目起步、Layout
  • 2023年CIE SCI1区TOP:序列融合麻雀搜索算法ISSA,深度解析+性能实测
  • N元语言模型的时间和空间复杂度计算
  • 【网络协议】三次握手与四次挥手
  • 【区块链 + 可信存证】创世云区块链存证平台 | FISCO BCOS 应用案例
  • Redis 数据结构的底层实现—字符串、哈希表、列表、集合
  • 【银河麒麟系统常识】命令:reboot(立即重启操作系统)
  • SQL server 2022和SSMS的使用案例1
  • linux,物理机、虚拟机,同时内外网实现方案;物理机与虚拟机互通网络;
  • 机器学习 分类算法
  • 苍穹外卖day12
  • 网络安全的重要性与防护措施
  • 一、STM32简介
  • OpenCV 图形API(10)用于执行标量除以矩阵的逐元素操作函数divRC()
  • 低代码框架
  • 网络协议之系列
  • 商标知识产权管理系统平台有哪些功能?
  • 第三方平台步步紧逼之下,独立站商城系统应如何做
  • MoLe-VLA:通过混合层实现的动态跳层视觉-语言-动作模型实现高效机器人操作
  • 牛脸分割数据集labelme格式1324张1类别有增强图片