基于OpenCV Python提取检测按钮并保存为独立图片
提取图片中的按钮并保存为独立图片
看起来你已经用MSER找对了方向,这玩意儿对检测UI里的按钮这类稳定区域确实挺好用!我来帮你补全代码,把按钮提取并保存成独立图片的流程走通:
完整可运行代码
import numpy as np import cv2 # 读取图片(注意Windows路径要用原始字符串r'',避免转义报错) img = cv2.imread(r'C:\Users\Rita\Desktop\ISCTE\2_ano\Tese\MSER\1_Exemplo\botoes.PNG', 1) vis = img.copy() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 初始化MSER检测器 mser = cv2.MSER_create() regions, _ = mser.detectRegions(gray) hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions] # 先画出所有检测到的区域(方便调试看效果) cv2.polylines(vis, hulls, 1, (0, 255, 0)) cv2.imwrite('detected_all_regions.png', vis) # 过滤有效按钮区域并保存 button_index = 0 for hull in hulls: # 获取区域的边界框坐标 x, y, w, h = cv2.boundingRect(hull) # 根据按钮的实际特征过滤(这里的阈值你要根据自己的图片调整!) area = w * h aspect_ratio = float(w) / h # 示例:过滤掉太小/太大、太窄/太宽的非按钮区域 if 1500 < area < 25000 and 0.4 < aspect_ratio < 2.2: # 裁剪出按钮区域 button_crop = img[y:y+h, x:x+w] # 保存为独立图片 cv2.imwrite(f'extracted_button_{button_index}.png', button_crop) button_index += 1 print(f"搞定!一共提取并保存了 {button_index} 个按钮~")
几个关键细节要注意
- 路径问题:Windows系统里的路径反斜杠容易触发转义,用
r'路径'这种原始字符串最省心 - 过滤参数:代码里的面积、宽高比阈值是示例,你得先看
detected_all_regions.png里的检测结果,调整这些数值,确保只留下按钮区域 - 调试优先:先保存所有检测区域的图,能帮你快速判断哪些参数需要调整,避免漏提按钮或者误提杂项
如果你的按钮还有特殊特征(比如统一的蓝色、圆角),还可以加额外的过滤逻辑——比如检查区域内的颜色均值,或者判断凸包的圆角程度,进一步提升准确率。
内容的提问来源于stack exchange,提问作者Rita Maia
相关产品推荐
相关产品推荐

