• 方案介紹
  • 附件下載
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

3.5.2-2-匹配多個模板的 2模板匹配識別 識別多個數(shù)字 多數(shù)字識別方案 openmv

04/10 08:53
991
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

聯(lián)系方式.txt

共1個文件

**非常詳細的視頻和文字教程,講解常見的openmv教程包括 巡線、物體識別、圓環(huán)識別、閾值自動獲取等。非常適合學習openmv、K210、K230等項目
視頻合集鏈接在


openmv教程合集 openmv入門到項目開發(fā) openmv和STM32通信 openmv和opencv區(qū)別 openmv巡線 openmv數(shù)字識別教程LCD

專刊openmv視覺文章鏈接:
https://blog.csdn.net/qq_46187594/category_12900902.html

2-匹配多個模板的

上面我們演示了如何實現(xiàn)匹配一個模板的,下面演示如何實現(xiàn)匹配多個模板的

首先把直接處理的文件都放進去pgm 按照一定的命名都放到openmv識別成的U盤里面
在這里插入圖片描述
然后下面是我們的0-9數(shù)字識別功能代碼

# 多模板匹配系統(tǒng) - 數(shù)字識別增強版
# 核心功能:
# 1. 支持0-9數(shù)字模板實時匹配
# 2. 可視化識別結果及性能指標
# 3. 結構化數(shù)據(jù)輸出

import time
import sensor
import image
from image import SEARCH_EX  # 導入窮舉搜索模式

# ******************** 攝像頭初始化配置 ********************
sensor.reset()                      # 復位攝像頭硬件
sensor.set_contrast(1)             # 設置對比度(范圍0-3)
sensor.set_gainceiling(16)         # 設置最大增益值(防止過曝光)
sensor.set_framesize(sensor.QQVGA)  # 設置圖像分辨率160x120
sensor.set_pixformat(sensor.GRAYSCALE)  # 使用灰度圖像模式(提升處理速度)
sensor.set_vflip(True)             # 垂直翻轉圖像(根據(jù)攝像頭物理安裝方向調整)
sensor.set_hmirror(True)           # 水平鏡像圖像(根據(jù)實際需要調整)

# ******************** 用戶可配置參數(shù) ********************
TEMPLATE_PATHS = [                 # 模板文件路徑列表
    "/0.pgm", "/1.pgm", "/2.pgm",  # 模板文件應存放在OpenMV存儲根目錄
    "/3.pgm", "/4.pgm", "/5.pgm",  # 建議使用32x32像素灰度圖像
    "/6.pgm", "/7.pgm", "/8.pgm", 
    "/9.pgm"
]
MATCH_THRESHOLD = 0.70            # 匹配相似度閾值(0.0-1.0,值越大匹配越嚴格)
SEARCH_STEP = 4                   # 搜索步長(增大可提升速度但降低精度)
TEXT_COLOR = 255                  # 顯示文本顏色(灰度模式下255=白色)
TEXT_OFFSET = 5                   # 文本與識別框的垂直間距(像素)

# ******************** 模板預加載系統(tǒng) ********************
class TemplateLoader:
    """
    模板加載管理器,實現(xiàn):
    1. 啟動時預加載所有模板到內存
    2. 自動從文件路徑提取模板名稱
    3. 提供錯誤加載提示功能
    """
    def __init__(self):
        self.templates = []       # 模板存儲列表
        self.load_templates()     # 初始化時自動加載模板
    
    def load_templates(self):
        """加載并驗證所有模板文件"""
        for path in TEMPLATE_PATHS:
            try:
                # 從文件路徑提取模板名稱(示例:"/9.pgm" -> "9")
                # split("/")[-1]獲取文件名,split(".")[0]去除擴展名
                name = path.split("/")[-1].split(".")[0]
                
                # 構建模板字典對象
                template = {
                    "image": image.Image(path),  # 加載模板圖像到內存
                    "name": name,               # 存儲簡化名稱
                    "path": path                # 保留完整路徑用于調試
                }
                self.templates.append(template)
                print(f"預加載成功:{path} -> {name}")
            except Exception as e:
                # 捕獲文件不存在或格式錯誤等異常
                print(f"加載失敗:{path} ({str(e)})")

# 實例化模板加載器(程序啟動時自動執(zhí)行加載)
template_loader = TemplateLoader()

# 初始化性能計數(shù)器(用于計算幀率)
clock = time.clock()

# ******************** 主處理循環(huán) ********************
while(True):
    clock.tick()  # 開始幀計時
    
    # 圖像采集處理流程
    img = sensor.snapshot()  # 捕獲一幀圖像
    
    # 多模板匹配流程
    for template in template_loader.templates:
        # 執(zhí)行模板匹配操作
        # find_template參數(shù)說明:
        # template - 預加載的模板圖像對象
        # threshold - 相似度閾值
        # step - 搜索步長(影響速度和精度)
        # search - 搜索模式(SEARCH_EX為全搜索)
        result = img.find_template(template["image"], 
                                  MATCH_THRESHOLD,
                                  step=SEARCH_STEP,
                                  search=SEARCH_EX)
        
        if result:  # 當匹配結果有效時
            # 解包匹配區(qū)域坐標(x,y)和尺寸(width,height)
            x, y, w, h = result
            
            # 可視化處理部分
            # 繪制紅色矩形框標記識別區(qū)域(顏色值255在灰度模式顯示為白色)
            img.draw_rectangle(result, color=TEXT_COLOR)
            
            # 計算文本顯示位置(防止超出圖像上邊界)
            text_y = y - TEXT_OFFSET if y > TEXT_OFFSET else 0
            
            # 在識別框上方顯示模板名稱
            # 參數(shù)說明:
            # x - 文本左上角X坐標(對齊識別框左側)
            # text_y - 垂直位置(識別框上方5像素)
            # template["name"] - 顯示的文本內容
            # color - 文本顏色
            # scale - 字體縮放比例
            # mono_space - 啟用等寬字體顯示
            img.draw_string(x, text_y, template["name"],
                           color=TEXT_COLOR, 
                           scale=1, 
                           mono_space=True)
            
            # 數(shù)據(jù)輸出部分
            # 輸出格式:[時間戳] 識別到 模板名稱 坐標: (中心X, 中心Y)
            print("[{:.0f}] 識別到 {} 坐標: ({},{})".format(
                time.ticks_ms(),          # 獲取系統(tǒng)毫秒時間戳
                template["name"],         # 模板名稱
                x + w//2,                 # 計算區(qū)域中心X坐標
                y + h//2                  # 計算區(qū)域中心Y坐標
            ))
    
    # 實時性能顯示
    fps = clock.fps()  # 計算實際幀率
    # 在畫面左上角顯示幀率信息(避免遮擋識別結果)
    # 參數(shù)5,5表示距離左上角5像素的起始位置
    img.draw_string(5, 5, "FPS:%.1f" % fps, color=TEXT_COLOR)

識別到會輸出在
在這里插入圖片描述
注意:如果覺得經(jīng)常誤識別,可以調整識別的匹配閾值

MATCH_THRESHOLD = 0.70            # 匹配相似度閾值(0.0-1.0,值越大匹配越嚴格)
  • 聯(lián)系方式.txt
    下載

相關推薦

方案定制

去合作
方案開發(fā)定制化,2000+方案商即時響應!