GTAV:原始影像和深度图获取

2023-05-16

背景

GTAV是一个非常好的游戏,目前也已经被广泛应用到深度学习之中了。本篇博客简单介绍一下如何采集数据。


1.数据采集

1. 代码修改

本篇博客的代码来源于GTAVisionExport。但是上述代码中,存在些许问题,经过调整后的代码如下:
https://github.com/Yannnnnnnnnnnn/GTAVisionExport。
主要修改的模块是:

  1. 使用二进制保存数据
  2. 调整深度渲染器分辨率,保持与游戏界面大小一致

此处,简单提一下GTAVisionExport的使用规则:

  1. 需要拷贝ScriptHookV的bin目录下的文件和上述代码编译生成的GTAVisionNative.asi & GTAVisionNative.lib到游戏根目录
  2. 关闭界面上的所有提示,包括地图、警告、字母等等;
  3. 采集数据前,应多次按键V,调整视角至第一人称。

2.去掉相机畸变

下图展示了一个使用上述代码采集数据的结果,可以发现在边缘部分,深度图和原始照片并不完全对应;产生的主要原因是因为相机畸变。
在这里插入图片描述
在这里插入图片描述
本文使用mod(https://www.gta5-mods.com/misc/no-chromatic-aberration-lens-distortion-1-41)修正相机畸变,方法是下载一个OpenVI,然后首先Tools->ASI Manger安装mod
在这里插入图片描述
然后把刚刚mod解压的三个timecycle_mods_1.xmltimecycle_mods_3.xmltimecycle_mods_4.xml拷贝到Grand Theft Auto V \ update \ update.rpf / common / data / timecycle下即可(使用openVI打开rpf文件)。

修正畸变后的结果如下,明显相机畸变不存在了。
在这里插入图片描述
在这里插入图片描述


2.数据读取

GTAVisionExport生成的数据是原始二进制块,可以借助opencv转换成上述图,基本代码如下:

1. depth

	FILE *fp;
	fp = fopen('depth.raw',"rb");
	float *data = new float[1920 * 1080];
	fread((void*)data, sizeof(float), 1920 * 1080, fp);
    fclose(fp);

    // 深度值需要矫正
    double b = 10003.814*0.15 / (-0.15 + 10003.814);
	double k = 10003.814 / (-0.15 + 10003.814) - 1.0;
	Mat img = cv::Mat::zeros(cv::Size(1920, 1080), CV_32FC1);
	for (int y = 0; y < 1080; y++)
	{
		for (int x = 0; x < 1920; x++)
		{
			img.at<float>(y, x) = b / (data[(y * 1920 + x)] + k);
		}
	}

	double minValue, maxValue;
	cv::minMaxIdx(img, &minValue, &maxValue);
	img = 255*(img - minValue) / (maxValue - minValue);
	img.convertTo(img, CV_8UC1);
	cv::Mat out;
	cv::applyColorMap(img, out, cv::COLORMAP_JET);
	cv::imwrite("depth.jpg", out);
	delete[]data;
	return 0;

2.rgb

	FILE *fp;
	fp = fopen("rgb.raw","rb");
	unsigned char *data = new unsigned char[4*1920 * 1080];
	fread((void*)data, sizeof(unsigned char), 4*1920 * 1080, fp);
	fclose(fp);

	Mat img = cv::Mat::zeros(cv::Size(1920, 1080), CV_8UC3);
	for (int y = 0; y < 1080; y++)
	{
		for (int x = 0; x < 1920; x++)
		{
			unsigned char r = data[ (y * 1920 + x) * 4 + 2 ];
			unsigned char g = data[ (y * 1920 + x) * 4 + 1];
			unsigned char b = data[ (y * 1920 + x) * 4 + 0];
			img.at<Vec3b>(y, x)[0] = r;
			img.at<Vec3b>(y, x)[1] = g;
			img.at<Vec3b>(y, x)[2] = b;

		}
	}

	cv::imwrite("color.jpg", img);
	delete[]data;
	return 0;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GTAV:原始影像和深度图获取 的相关文章

  • 802.11 QoS

    到了空调西瓜WiFi的夏日时光了 xff0c 家里用网的人一多 xff0c 难免会抢占起宽带资源来 有没有什么办法 xff0c 让家里所有人都可以得到一个比较不错的网络体验呢 xff1f 那今天你可以试试打开你路由器的QoS功能了 xff0
  • Wireshark抓包分析WLAN连接过程

    一个完整的WLAN连接过程 xff1a 一 xff1a WLAN扫描 主动扫描 xff1a 两种方式 xff1a xff08 1 xff09 向各个信道发出Probe Request帧并制定某个SSID xff0c 只有能够提供指定SSID
  • 802.11X用户身份验证 EAPOL

    EAPOL是什么 sogou com 802 11X用户身份验证 走看看 zoukankan com EAPOl的由来是基于802 1x网络访问认证技术 xff1a 802 1x协议起源于802 11协议 xff0c 后者是IEEE的无线局
  • git reset

    git reset 三种模式分别为 mixed 默认 soft hard 直接看官方的解释 其中HEAD代表版本库 xff0c index代表暂存区 xff0c 另外还有一个我们改代码的工作区 mixed 回退版本库 xff0c 暂存区 m
  • git reset还是git revert?

    reset和revert都可以用来回滚代码 但他们是有区别的 xff0c 准确来说 xff0c reset是用来 34 回退 34 到某个提交 xff0c 而revert是用来 34 撤销 34 某次或者某几次提交 xff0c 撤销也会作为
  • PR and MR

    GitHub 的 Pull Request 是指什么意思 xff1f 作者 xff1a 知乎用户 链接 xff1a https www zhihu com question 21682976 answer 79489643 来源 xff1a
  • python--基础知识点--subprocess模块

    subprocess 模块的介绍与使用 一 介绍 subprocess模块可以生成新的进程 xff0c 连接到它们的input output error管道 xff0c 同时获取它们的返回码 二 基本操作方法 1 subprocess的ru
  • Homebus(HBS)通信协议学习

    HBS通信主控与从机连接示意图 两根HBS总线之间的电压差大约为15V xff0c 差分信号分别加载到HBS的这两根总线上 用示波器的探头测得 xff08 探头的地在任意一根HBS总线上 xff0c 探头的信号输入端在另一根HBS总线上 x
  • RSA参数及RSA用法

    RSA算法n e d三个参数的意义 n为q p乘机 e为加密质数数值 d为解密质数数值 其中 e d p 1 q 1 61 1余数为1 其中p和q为2个足够大的素数 RSA的算法涉及三个参数 xff0c n e1 e2 其中 xff0c n
  • STM32的CAN

    一 CAN控制器简介 STM32自带了基本扩展CAN外设 xff0c 又称bxCAN xff0c bxCAN的特点如下 xff1a 1 支持CAN协议2 0A和2 0B主动模式 2 波特率最高达1Mbps 3 支持时间触发通信 4 具有3个
  • VSCode使用ssh密钥,不用每次输密码登录服务器的方法

    如果已经用ssh keygen 生成密钥了 xff0c 则跳过生成密钥这一步 客户端机器生成密钥 也就是vscode运行的机器 xff0c 在终端任意路径下输入 ssh keygen 生成密钥 本地 ssh keygen 默认目录在 ssh
  • Wi-Fi 802.11协议 管理帧 之 Auth帧详解

    Auth xff1a 链路认证 链路认证阶段主要是 AP 用来确认 Station 是否是 802 11 设备 xff0c 确认彼此是否可以正常通讯 xff0c 身份认证一般有为两种方式 xff0c 一种是开放系统认证 xff0c 另一种是
  • 802.11 协议介绍

    802 11协议基础 前言 OSI七层网络 开放式系统互联模型 xff08 Open System Interconnection Model xff09 是一种概念模型 xff0c 由国际标准化组织提出 xff0c 一个试图使各种计算机在
  • 802.11标准deauth报文的reason code中文版

    代码 原因 0 保留 1非特定原因 2以前的身份验证不再有效 3由于发送STA离开 xff08 或已经离开 xff09 ibs或ESS而被取消身份验证 4由于不活动而解除关联 5已解除关联 xff0c 因为AP无法处理所有当前关联的STA
  • 虚拟机ubuntu单向ping通

    可以单向ping通 xff0c 到win端查看VMnet8 xff0c 发现VMnet8不见了 找回方法 xff1a 在VMware中对NAT模式进行 还原默认设置 操作或者配置好后点击确定 xff08 注意 xff1a 虚拟机开机后无法还
  • Beyond compare文件夹内容自动比较

    前言 xff1a 在一开始比较文件都是手动一个个去点击文件 xff0c 如果是几万个代码文件这将是巨大的工程 xff0c 带着偷懒的想法跑去找方法真找到了 默认会全部的文件标红 xff0c 这就很难受了 解决方案 xff1a 顶部的菜单 会
  • 从MIT协议谈契约精神

    以前看到过李笑来讲的发生在他身上的故事 xff0c 说他当年 2001年 住在双榆树 xff0c 经常去双安商场的地下超市买东西 xff0c 有一次买了个什么东西觉得不好 xff0c 要退 xff0c 超市服务员说按规定 xff0c 该类商
  • VLC命令行使用帮助

    Usage vlc options stream You can specify multiple streams on the commandline They will be enqueued in the playlist The f
  • 将Conda Prompt Here添加到右键菜单

    如何将Conda Prompt Here添加到右键菜单 Conda是一个非常流行的Python的环境管理工具 xff0c 在做项目的时候把它跟IDE整合在一起用来管理不同项目的环境会很方便 xff0c 但是在日常使用Windows的过程中如
  • AMS-1117

    电路图 说明 10uF 61 10622uF 61 226100nF 61 104106 61 10乘以10的6次方pF xff1b 简单点的说就是106表示容量 10后面加六个零 单位pF 转换成uF就是10uF 电容之间的换算公式 xf

随机推荐