Python Open-cv使用方法——cv2
在安卓自动化测试中,图像识别是一个关键技术,特别是在用户界面测试中。本文将详细解析一个完整的图标查找系统,展示如何使用Python实现图像匹配功能。主要是使用adb命令去截图,然后保存在特定路径下。Python图像识别技术详解:CV2。
·
Python图像识别技术详解:CV2
概要
在安卓自动化测试中,图像识别是一个关键技术,特别是在用户界面测试中。本文将详细解析一个完整的图标查找系统,展示如何使用Python实现图像匹配功能。
1.获取屏幕截图
主要是使用adb命令去截图,然后保存在特定路径下。
cmd = f"adb -s {device_id} exec-out screencap -d {display_id} -p > {image_path}"
图像处理流程:
- 调用截图方法获取屏幕图像
- 根据gray_scale参数决定是否转换为灰度图
- 灰度图可以提高匹配速度和准确性
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. 技术细节
- 图像预处理
灰度转换: 减少计算复杂度,提高匹配速度
色彩空间转换: 确保图像格式一致性 - 匹配算法选择
TM_CCOEFF_NORMED: 适合图标查找场景
阈值控制: 避免误匹配 - 性能优化
多候选匹配: 按优先级顺序尝试不同图标
异常处理: 确保系统稳定性 - 调试支持
时间戳记录: 便于问题追踪
失败截图保存: 用于分析匹配失败原因
更多推荐
所有评论(0)