全景图的获取以及HTML页面显示全景图

目录

前言

1. 使用全景相机拍摄

2.手机app拍摄

3.使用爬虫爬取

二、全景图显示

总结


前言

随着前端技术的不断发展,图像的展示越来越重要,本文就介绍了全景图获取与显示的基础内容。


一、全景图片获取方法

1. 使用全景相机拍摄

拍摄的图片在2维显示下会变形,但是不影响全景图的显示

2.手机app拍摄

 一般是通过拍摄多张图片通过算法合成,无法获得完整的全景图,全景图展示的时候缺失的部分无法显示。拍摄全景图的app有很多(部分手机自带,但是不一定能达到要求,因为全景图片必须首尾相连),在这里介绍一款《广角相机》app,感觉并不是很稳定,有更好推荐的童鞋可以评论区补充,具体操作步骤如下:

  1. 打开相机,水平拍摄20张图片,注意每张照片的衔接,下一张图片尽量包含上一张图片的30%,方便算法拼接,保证正确度
  2. 点击合成图片,最终效果如下

3.使用爬虫爬取

  1. 进入百度地图界面(网址https://map.baidu.com/),选择街景地图,进入街景

      2.复制panoid的值

           3. 将复制的值粘贴到写好的代码(后面会给出)

        4. 运行代码,当前目录下名为output.jpg的照片即为全景图,生成的img_frag目录为图片碎片目录

          5.  爬虫代码

import requests
import base64
import numpy as np
from PIL import Image
import os
from tqdm import tqdm# panoid 这个值决定爬取的位置
panoid = "09001900011610281321007255F"# 全局图网址
url = "https://mapsv1.bdimg.com/?qt=pdata&sid="+ panoid +"&pos={}_{}&z=4"# 请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.39"
}def base64_to_img(bstr, file_path):   # base64编码成图片imgdata = base64.b64decode(bstr)file = open(file_path, 'wb')file.write(imgdata)file.close()def image_stitch():imgdict = {}for i in os.listdir("./img_frag"):if i.split(".jpg")[0].split("_")[0] not in imgdict.keys():imgdict[i.split(".jpg")[0].split("_")[0]] = []for j in imgdict.keys():if i.split(".jpg")[0].split("_")[0] == j:imgdict[j].append(i)print(imgdict)isfirst = 0imglist = []tempimg = Image.Image()for i in imgdict.keys():for j in imgdict[i]:if isfirst == 0:tempimg = Image.open('./img_frag/' + j)isfirst = 1else:img = Image.open('./img_frag/' + j)tempim = np.array(tempimg)  # 转化为ndarray对象im = np.array(img)  # 转化为ndarray对象imstitch = np.concatenate((tempim, im), axis=1)  # 横向拼接tempimg = Image.fromarray(imstitch)imglist.append(tempimg)tempimg = Image.Image()isfirst = 0print(imglist)saveim = imglist[0]for i in imglist[1:]:saveim = np.concatenate((saveim, i), axis=0)  # 纵向拼接saveimage = Image.fromarray(saveim)saveimage.save("output.jpg")print("Image stitching completed!")def img_spide():# 该平台全景图片被分割为32张,全部爬取后保存pbar = tqdm(total=32)   # 进度条for i in range(0,4):for j in range(0,8):response = requests.get(url=url.format(i,j), headers=headers)with open('./img_frag/{}_{}.jpg'.format(i,j),'wb') as f:f.write(response.content)pbar.update(1)print("image collect successful!")if __name__ == '__main__':if not os.path.exists("./img_frag"):os.mkdir("img_frag")img_spide()image_stitch()

二、全景图显示

本文全景图展示基于开源项目Photo Sphere Viewer。

Photo Sphere Viewer是一个JavaScript库,允许您在任何网页上显示360×180度的全景图。全景图必须使用等矩形投影,可以使用Android 4.2 Jelly Bean自带的拍照模式Photo Sphere拍摄。

Photo Sphere Viewer使用了Three.js库,所以你的访问者不需要任何东西,除了一个兼容canvas或者更好的WebGL的浏览器。

Git地址:https://gitee.com/mirrors_JeremyHeleine/Photo-Sphere-Viewer

Photo Sphere Viewer中自带案例,使用者无需具备编程知识也可以简单使用,简单使用步骤如下:

  1. 下载项目源代码

      2. 开案例test.html,并打开上述获取到的全景图

         3. 即可进行全景图的浏览

             4. 对比全景相机拍摄(爬虫爬取的数据也是全景相机拍的)和手机拍摄,手机拍摄的照片,天空部分有可能会变形或者显示成黑色

                  全景相机拍摄的效果明显更好

 上述的案例是打开本地的全景图片,但在实际开发过程中,需要将该功能加入自己的web应用中,就需要对代码修改

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>Photo Sphere Viewer</title><meta name="viewport" content="initial-scale=1.0" /><!-- 引入相应的js文件 --><script src="../three.min.js"></script><script src="../photo-sphere-viewer.min.js"></script><style>html, body {margin: 0;width: 100%;height: 100%;overflow: hidden;}#container {width: 100%;height: 100%;}</style></head><body><!-- 存放全景图的容器div --><div id="container"></div><script>var div = document.getElementById('container');// 初始化全景图显示对象var PSV = new PhotoSphereViewer({// 全景图地址,这里需要特别注意,需要使用网络上的图片,如果使用本地的文件,会报CORS跨域请求错误,当然如果你的网络Web应用已经部署在服务器上,可以忽略这个问题panorama: 'http://tassedecafe.org/wp-content/uploads/2013/01/parc-saint-pierre-amiens.jpg',container: div,time_anim: 3000,navbar: true,navbar_style: {backgroundColor: 'rgba(58, 67, 77, 0.7)'},});</script></body></html>

 其中需要注意的是,这个例子不能本地的文件,会报CORS跨域请求错误,当然如果你的网络Web应用已经部署在服务器上,可以忽略这个问题

 


总结

以上就是今天要讲的内容,本文仅仅简单介绍了全景图片的获取以及利用Photo Sphere Viewer简单显示全景图。感谢大家的支持,你的支持是我进步的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/63528.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PTGui+PS生成全景图

1.打开PTGui&#xff0c;加载影响&#xff0c;拖入需要生成的全景图文件 2.点击对齐影像 3.点击创建全景图片 4.把生成的全景图导入到PS&#xff0c; 由于生成的全景图天空是空缺的&#xff0c;需要使用PS修复 套索选中黑色区域&#xff0c;右击填充即可。如遇到内存不足&#…

百度全景图/内景图切换示例

先看效果&#xff1a; 外景图 内景图&#xff1a; 具体代码&#xff1a; <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name"viewport" content&qu…

什么是全景图?如何进行vr全景图拍摄

照片可以记录生活中的精彩的片段&#xff0c;而且照片的种类也分为很多&#xff0c;比如人像图&#xff0c;美食图&#xff0c;风景图等&#xff0c;其中有一种照片称为大像素全景图&#xff0c;大像素是全景的一种比较超高清的全景图&#xff0c;他不仅可以保留vr全景技术的所…

自己制作并发布720°VR全景图

大疆内置的全景图不好用&#xff0c;导出就成了平面图了&#xff0c;只能在他的“天空之城”上看&#xff0c;很不方便&#xff0c;而且他的全景图像素降低了&#xff0c;所以我们要自己制作。 1、先用大疆或者其它设备拍一组全景照。 2、然后下载并安装“PTGui”软件&#xff…

浪潮信息Inspur KOS性能及稳定性位列前茅 与万里安全数据库GreatDB高效兼容

为满足企业在数据安全、产品可控等数字化转型中的多样化需求&#xff0c;浪潮信息正基于技术与应用的深厚积累&#xff0c;持续优化创新产品及服务能力&#xff0c;助力企业在数智化时代下构筑黑心竞争力。日前&#xff0c;浪潮信息打造的Inspur KOS V5与万里安全数据库软件Gre…

随便聊聊浪潮开务数据库

今天这个话题挺随意&#xff0c;我们来聊聊浪潮开务数据库&#xff0c;原因主要是我的微信朋友圈被这个数据库刷屏了。当然我对这款号称多模数据库的非开源数据库也很感兴趣&#xff0c;也有很多疑问&#xff0c;希望各位专家能帮忙答疑解惑&#xff0c;揭开这款即将发布的 Kai…

浪潮信息推出服务器操作系统Inspur KOS的底气与豪气

近日&#xff0c;浪潮信息正式发布了其基于Linux内核、OpenAnolis等开源成果自主研发的服务器操作系统Inspur KOS&#xff0c;这为本就热闹非凡的自主操作系统市场再次带来涟漪。 何以推出Inspur KOS&#xff1f; 浪潮信息副总裁张东表示&#xff0c;“智慧时代&#xff0c;计…

20220624使用python3通过近6期的号码生成双色球红球

20220624使用python3通过近6期的号码生成双色球红球 2022/6/24 18:33 https://zst.cjcp.com.cn/shdd/ssq-hq.html 双色球红球杀号 首先获取近100期的双色球的红球号码。 【本例子以2022-06-21号算号为例子】 获取最近的6期的号码&#xff1a; 04 06 12 13 17 31 09 14 18 23…

php双色球(完整)

显示效果&#xff1a; 代码&#xff1a; <?php // 红色球号码区$red range(1, 33);// 随机选出6位数字for ($i0; $i < 6; $i) { $num array_rand($red); $redArr[] $red[$num];unset($red[$num]);}// 将选出来的6位数字小于10的补零foreach ($redArr as $v) {$red_b…

Proteus8.11的卸载与安装

写在前面&#xff1a;本来之前根据公众号的资料安装过&#xff0c;但是最近突然莫名其妙开始闪退&#xff0c;写的数码管显示程序在别人的电脑能跑&#xff0c;自己的数码管显示程序总闪退&#xff0c;搜索以后得知可能是软件安装的问题&#xff0c;就打算重装。卸载安装兜兜转…

《流浪地球》中的人工智能Moss背叛人类了吗?

编者按&#xff1a;《流浪地球》实在太火了&#xff0c;整个网络都在讨论这部电影。看过电影的人&#xff0c;一定记得这句经典台词&#xff0c;但刘培强决定要牺牲自己去点燃木星时&#xff0c;人工智能Moss说到&#xff0c;“让人类永远保持理智&#xff0c;确实是一种奢求”…

热分析TG-DTG-DTA-DSC介绍

热分析&#xff1a;1903年由Tammann提出&#xff0c;指用固定的速率加热或冷却物质&#xff0c;然后通过测量物质物理性质(如质量、温度、热焓、尺寸、机械、电学、磁学)研究物质物理变化(晶型转变、熔融、升华、吸附)和化学变化(脱水、分解、氧化、还原)的技术。我们常用到的热…

【化学信息学】药物研发的过程和意义

药物研发的过程和意义 1. 药物研发过程简介2. 药物发现2.1 Target Discovery2.2 Target Validation2.3 Lead Compound Identification2.4 Lead Optimization 3. 临床前药物开发4. 药物设计的意义5. 药物研发案例&#xff1a;卡托普利参考资料 1. 药物研发过程简介 现代药物的研…

【ChatGpt体验】ubuntu18安装Cursor编译器

国内使用chatgpt的话比较麻烦&#xff0c;找了好多教程都不太行&#xff0c;突然看到了OpenAI推出的编写代码神器Cursor。赶紧来上手体验一波~~ Cursor 官网传送门&#xff1a;Cursor windows的话直接安装即可&#xff0c;我这里使用的是ubuntu18&#xff0c;需要升级下相应…

用户注册 v1 -根据手机号注册用户

注册流程图 1. 校验手机号是否合法 public boolean verifyPhone(String phone) {Pattern pattern Pattern.compile("^[1]\\d{10}$"); // 正则&#xff1a;手机号&#xff08;简单&#xff09;, 1字头&#xff0b;10位数字即可.return pattern.matcher(phone).matc…

unity(登录注册用手机号短信验证)

短信验证 1、短信验证我是通过mob的SMSSDK实现的&#xff08;free&#xff09; 官网下载&#xff1a;http://www.mob.com/wiki/detailed?wikiSMSSDK_for_Unity3D&id23 2、在mob上注册一个账号&#xff0c;创建应用获得key和secret 替换案例中demo中的key和secret&#x…

chatgpt赋能python:Python如何设置字体大小:完美掌握方法

Python如何设置字体大小&#xff1a;完美掌握方法 你是否想要掌握Python如何设置字体大小&#xff1f;如果答案是肯定的&#xff0c;那么你来到了正确的地方。在本文中&#xff0c;我将向您介绍Python如何设置字体大小&#xff0c;以帮助您在编写代码时达到最佳效果。 为什么…

chatgpt赋能python:Python中文SEO设置指南

Python中文SEO设置指南 随着中国市场的不断扩大&#xff0c;越来越多的企业和开发者开始将目光投向了中文市场。而在中文市场&#xff0c;优化网站的SEO是至关重要的。在Python编程中也需要考虑中文SEO问题&#xff0c;因此本文将介绍如何在Python中设置中文SEO。 什么是中文…

语音抑郁症研究框架

1、数据集 MODMA 抑郁症语音数据集&#xff1a;http://modma.lzu.edu.cn DAIC-WOZ 抑郁症语音数据集&#xff1a;https://dcapswoz.ict.usc.edu AViD-Corpus抑郁症语音数据集&#xff1a;http://avec2013-db.sspnet.eu 2、特征提取工具 openSMILE&#xff1a;https://www.…

一文看懂 AIGC 的版权问题

伴随着 AIGC 技术的强势出圈&#xff0c;大家在惊叹 AI 技术强大的同时&#xff0c;也有越来越多的人开始讨论关于由此带来的版权问题&#xff1a;我们通过 AI 生成的图像属于平台还是个人&#xff1f;目前 AI 作品版权在法律上是如何界定的&#xff1f;又该如何避免引起 AI 版…