XiaoJiang0208 / TarkovMapTool

基于塔科夫截图的地图坐标分析工具
27 stars 10 forks source link

添加了注释,一份对截图文件名的分析 #4

Closed A5rZ closed 8 months ago

A5rZ commented 8 months ago

联机部分写的有点抽象,没有服务器端文件先写了用户端?还是有没发布? 或许可以尝试自行解析不依赖网站?文件名字的解析并不复杂,实现分层地图,和镜头方向,在小地图上标注附近物资点?

XiaoJiang0208 commented 8 months ago

哈哈哈抱歉现在才看到,感谢提供的思路,我想过自己渲染地图,但主要是懒想用网站的任务地点标记啥的😂,联机确实有点抽象现在至少能用了,先就这样吧。 主要是我今年高考没什么时间,我对口升学3月份就放假,到时候在来重写吧🤣

Iginisglaices commented 8 months ago

简单写了一些func来实现文件名读取,坐标变换和坐标显示图片合成。

  1. 截图读取 ` def Read_Screenshoot():

    截图文件夹路径

    pathname = r'C:\Users\xxxxxx\Documents\Escape from Tarkov\Screenshots'

    建立一个列表读取文件夹中的文件名

    file_lists = os.listdir(pathname) file_lists.sort( key=lambda fn: os.path.getmtime(pathname + "\" + fn) if not os.path.isdir(pathname + "\" + fn) else 0)

    最新的文件名

    filename_latest = file_lists[-1] return filename_latest`

2.提取截图文件名的坐标

` def Extractlocation(filename):

# 先根据下划线符号对文件名进行拆分,并提取到substring

symbol = '_'
position = filename.find(symbol)
substring = filename[position+1:]
position = substring.find(symbol)
substring = substring[:position]

# 使用正则表达式提取需要的字段并转换成数字格式

pattern = r'\-?\d+\.?\-?\d+'
numbers = re.findall(pattern, substring)
axis= (float(numbers[0]),float(numbers[2]))

# 返回坐标值

return axis`

3.地图帧合成,这个我只会用cv2做图片,我猜应该有更高效的方法,这里抛砖引玉了。

`
def Draw_Location(axis):

# 读取图像文件并转换为RGB格式,这里是地图文件的图片

image = cv2.imread('Street.jpg')

# 创建与原始图像相同大小且类型为RGB的空白图像

blank_image = np.zeros(image.shape[:3], dtype=np.uint8)

# 定义坐标点的RGB值

red = (0, 255, 0)

# 选择想要添加坐标点的位置

# 根据导入地图图片像素确认截图坐标位置+1时在图片上变化的坐标需要乘的比例系数

proportion_x = ???
proportion_y = ???

# 导入的地图图片的尺寸

size_x = ???
size_y = ???
axis_x = axis[0]*proportion_x
axis_y = axis[1]*proportion_y
x = size_x = size_x-axis_x
y =  size_y+axis_y
x = int(x)
y = int(y)

# 在指定位置处绘制坐标点

cv2.circle(blank_image, (x, y), radius=10, color=(red),thickness=-1)

# 合并原始图像和新生成的图像

result = cv2.addWeighted(image, alpha=1, src2=blank_image, beta=1, gamma=0)
cropped = result[y-600:y+600, x-600:x+600]、

# 图像缩放

ReResult = cv2.resize(cropped, (500, 500))

# 显示最终结果图像,这里用up的视频里的工具将显示的窗口定义为悬浮窗即可。

cv2.imshow("Map", ReResult)
key = cv2.waitKey(0)
cv2.destroyWindow('Map')`
XiaoJiang0208 commented 8 months ago

简单写了一些func来实现文件名读取,坐标变换和坐标显示图片合成。

  1. 截图读取 ` def Read_Screenshoot():

    截图文件夹路径

    pathname = r'C:\Users\xxxxxx\Documents\Escape from Tarkov\Screenshots'

    建立一个列表读取文件夹中的文件名

    file_lists = os.listdir(pathname) file_lists.sort( key=lambda fn: os.path.getmtime(pathname + "\" + fn) if not os.path.isdir(pathname + "\" + fn) else 0)

    最新的文件名

    filename_latest = file_lists[-1] return filename_latest`

2.提取截图文件名的坐标

` def Extractlocation(filename):

# 先根据下划线符号对文件名进行拆分,并提取到substring

symbol = '_'
position = filename.find(symbol)
substring = filename[position+1:]
position = substring.find(symbol)
substring = substring[:position]

# 使用正则表达式提取需要的字段并转换成数字格式

pattern = r'\-?\d+\.?\-?\d+'
numbers = re.findall(pattern, substring)
axis= (float(numbers[0]),float(numbers[2]))

# 返回坐标值

return axis`

3.地图帧合成,这个我只会用cv2做图片,我猜应该有更高效的方法,这里抛砖引玉了。

`
def Draw_Location(axis):

# 读取图像文件并转换为RGB格式,这里是地图文件的图片

image = cv2.imread('Street.jpg')

# 创建与原始图像相同大小且类型为RGB的空白图像

blank_image = np.zeros(image.shape[:3], dtype=np.uint8)

# 定义坐标点的RGB值

red = (0, 255, 0)

# 选择想要添加坐标点的位置

# 根据导入地图图片像素确认截图坐标位置+1时在图片上变化的坐标需要乘的比例系数

proportion_x = ???
proportion_y = ???

# 导入的地图图片的尺寸

size_x = ???
size_y = ???
axis_x = axis[0]*proportion_x
axis_y = axis[1]*proportion_y
x = size_x = size_x-axis_x
y =  size_y+axis_y
x = int(x)
y = int(y)

# 在指定位置处绘制坐标点

cv2.circle(blank_image, (x, y), radius=10, color=(red),thickness=-1)

# 合并原始图像和新生成的图像

result = cv2.addWeighted(image, alpha=1, src2=blank_image, beta=1, gamma=0)
cropped = result[y-600:y+600, x-600:x+600]、

# 图像缩放

ReResult = cv2.resize(cropped, (500, 500))

# 显示最终结果图像,这里用up的视频里的工具将显示的窗口定义为悬浮窗即可。

cv2.imshow("Map", ReResult)
key = cv2.waitKey(0)
cv2.destroyWindow('Map')`

感谢思路,这几天试试看

Sma1lboy commented 8 months ago

我以为作者重新写了地图和游戏实际定位映射关系。没想到是eng访问网站。不错的思路hahahahaha

XiaoJiang0208 commented 8 months ago

我以为作者重新写了地图和游戏实际定位映射关系。没想到是eng访问网站。不错的思路hahahahaha

哈哈哈最偷懒的一集