Python图像识别技术详解:CV2

概要

在安卓自动化测试中,图像识别是一个关键技术,特别是在用户界面测试中。本文将详细解析一个完整的图标查找系统,展示如何使用Python实现图像匹配功能。

1.获取屏幕截图

主要是使用adb命令去截图,然后保存在特定路径下。

cmd = f"adb -s {device_id} exec-out screencap -d {display_id} -p > {image_path}"

图像处理流程:

  1. 调用截图方法获取屏幕图像
  2. 根据gray_scale参数决定是否转换为灰度图
  3. 灰度图可以提高匹配速度和准确性

2.识别图像

def find_icon(pic, device_id="", display_id="", gray_scale=True):
	# 加载截图图片
	screenshot = cv2.imread(screenshot_path)
	# 根据灰度参数将截图转换为适当的格式
	if gray_scale:
  		screenshot_processed = cv2.cvtColor(screenshot, cv2.COLOR_BGR2GRAY)
	else:
   		screenshot_processed = cv2.cvtColor(screenshot, cv2.COLOR_BGR2RGB
   		
	for icon_path in icon_candidates:
	    icon = cv2.imread(icon_path)
	    if gray_scale:
	       icon_processed = cv2.cvtColor(icon, cv2.COLOR_BGR2GRAY)
	    else:
	       icon_processed = cv2.cvtColor(icon, cv2.COLOR_BGR2RGB)
	       # 准备模板匹配
	       res=cv2.matchTemplate(screenshot_processed,icon_processed,cv2.TM_CCOEFF_NORMED)
	       # 检查匹配是否通过阈值
		if np.max(res) >= threshold:
		    print(f"图片匹配成功: {icon_path}")
		    print(f"图片准确率: {np.max(res)}")
		    #普通图标:0.9   重复图标:0.995
		    print(f"阈值: {threshold}")
		    return True, res
		else:
            print("图片不匹配 "f"阈值: {np.max(res)} < {threshold}")

3. 技术细节

  1. 图像预处理
    灰度转换: 减少计算复杂度,提高匹配速度
    色彩空间转换: 确保图像格式一致性
  2. 匹配算法选择
    TM_CCOEFF_NORMED: 适合图标查找场景
    阈值控制: 避免误匹配
  3. 性能优化
    多候选匹配: 按优先级顺序尝试不同图标
    异常处理: 确保系统稳定性
  4. 调试支持
    时间戳记录: 便于问题追踪
    失败截图保存: 用于分析匹配失败原因
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐