图像资源管理
INFO
阅读这部分内容前你可能需要了解
图像被加载到内存后的数据结构, 如何访问每一处的像素值
基础的python-opencv的函数使用
函数名称 作用 cv2.imread读取图像 cv2.imwrite保存图像 cv2.resize裁剪图像 cv2.cvtColor转换图像颜色空间 cv2.matchTemplate模板匹配
图像资源读取
对应文件路径 : "core/position.py"
规则:
图像具有 server, prefix, name 和 position, 这些信息存储在
src/images/server/x_y_range/*.py文件中。变量名 含义 是否必要 server服务器 是 path图像路径 是 prefix图像所属任务类别 是 name图像名称 是 position图像截取时坐标
(x1, y1, x2, y2)
左上, 右下否 - note: 你也许会疑惑为什么大部分x_y_range.py中
prefix和path相同, 请注意x_y_range/activity中的x_y_range.py, 每一期活动需要从不同的path加载图像, 但是他们在prefix都是activity- 即
path仅与图像加载有关prefix仅与图像的引用有关
- 即
- note: 你也许会疑惑为什么大部分x_y_range.py中
图像的真实路径为
pythonpath = f"src/images/{server}/{path}/{name}.png"图像被加载到内存后,存储在
core.position.image_dic中- 获取图像python
template = image_dic[server][f"{prefix}_"{name}"]
- 获取图像
图像的位置信息被储存在
core.position.image_x_y_range中 获取图像区域:- 方法一
pythonarea = image_x_y_range[server][prefix][name]- 方法二
pythonarea = get_area(server, f"{prefix}_{name}")图像的 prefix 可以包含
"_"字符,但 name 不能包含。
原因:get_area使用rsplit方法分割prefix和name, 因此 name 不能包含"_", 一般用"-"分割。
例:
src/images/CN/x_y_range/arena.py, 该路径表示服务器是国服(CN)
python
prefix = "arena" # 图像用于竞技场任务
path = "arena" # 存放在 "src/images/CN/arena" 目录下
x_y_range = {
'menu': (107, 9, 162, 36), # 图像"src/images/CN/arena/menu.png"截取时的坐标
'edit-force': (107, 9, 162, 36)
}剪切后的截图图像放入 resource/images/server/arena 目录下:
shell
resource/images/server/arena
│
├── menu.png
└── edit-force.png相关函数
init_image_data
- Args:
self: Baas_thread 的实例, 用于提供server/current_game_activity等信息
- description: 根据
self.server, 初始化一个服务器的所有图像数据 - note:
- 该函数扫描
src/image/server/x_y_range目录下的所有文件, 根据上文图像资源读取规则初始化图像数据 - 每一期活动的图像单独加载, 根据当期活动(
self.current_game_activity)名称加载对应图像
- 该函数扫描
get_area
- Args:
servername
- description: 获取指定图像的区域
- note: 参数中的
name与上文中的name不同, 这里的name是prefix_name的形式。 - return:
(x1, y1, x2, y2) - 例:python
area = get_area("CN", "arena_menu") # (107, 9, 162, 36)
