小案例:编写立方体六个面,合成一张全景图后端

一、需求:

  • 给出立方体六个面,合成一张全景图

二、主要知识:py360convert

2.1、该项目的特点:

  • 立方体贴图和等矩形之间的转换
  •  

  • 等角于平面
  •  

  • 纯python实现,仅依赖于numpy和scipy
  • 矢量化实施(在大多数地方)
    • c2ee2c在1.6 GHz Intel Core i5 CPU上花费300ms并花费160ms

2.2、安装

pip install py360convert

现在,您可以在任何地方import py360convert或使用命令行工具convert360


2.3、参数

e2c(e_img, face_w=256, mode='bilinear', cube_format='dice')

将给定的等矩形转换为立方体贴图。
参数

  • e_img:形状为[H,W,C]的块状数组。
  • face_w:每个立方体面的宽度。
  • modebilinearnearest
  • cube_format:请参阅c2e说明。
e2p(e_img, fov_deg, u_deg, v_deg, out_hw, in_rot_deg=0, mode='bilinear')

从给定的等角线拍摄透视图。 参数

  • e_img:形状为[H,W,C]的块状数组。
  • fov_deg:以int或tuple给出的视野(h_fov_deg, v_fov_deg)
  • u_deg:水平视角在[-pi,pi]范围内。(-左/ +右)。
  • v_deg:垂直视角,范围为[-pi / 2,pi / 2]。(-向下/ +向上)。
  • out_hw(height, width)以元组输出图像。
  • in_rot_deg:平面内旋转。
  • modebilinearnearest

 

三、示例:

3.1、立方体六个面:

背面(b):

前面(f):

左面(l):

右面(r):

上面(u):

下面(d):

 

3.2、合成全景图效果:

 

三、编辑后端代码:

import uuid
import os
import py360convert
from django.core.files.storage import default_storage
from django.http import JsonResponse
import cv2# Create your views here.def image_transpose(req):if req.method == 'POST':# 给图片唯一标识uuid0 = str(uuid.uuid1())# 获取图片信息,六个面依次为:前、后、左、右、上、下front_image = req.FILES.get("front_image", None)backward_image = req.FILES.get("backward_image", None)left_image = req.FILES.get("left_image", None)right_image = req.FILES.get("right_image", None)top_image = req.FILES.get("top_image", None)bottom_image = req.FILES.get("bottom_image", None)quality_para = req.POST.get("quality", None)target_size_w = req.POST.get("size", None)# 获取图片宽度if not target_size_w:target_size_w = 3000if target_size_w is not None:target_size_w = int(target_size_w)target_size_h = int(target_size_w // 2)# 控制图片清晰度if not quality_para:quality_para = 3quality_map = {0: 40,1: 60,2: 90}quality_para = int(quality_para)quality_save = quality_map.get(quality_para, None)if quality_save is None:quality_save = 70os.mkdir('./static/trans' + uuid0)out_path = 'static/' + uuid0# 合成全景图if front_image and backward_image and left_image and right_image and top_image and bottom_image:default_storage.save(os.path.join('static/trans/', uuid0, 'front_image.jpg'),front_image)default_storage.save(os.path.join('static/trans/', uuid0, 'backward_image.jpg'),backward_image)default_storage.save(os.path.join('static/trans/', uuid0, 'left_image.jpg'),left_image)default_storage.save(os.path.join('static/trans/', uuid0, 'right_image.jpg'),right_image)default_storage.save(os.path.join('static/trans/', uuid0, 'top_image.jpg'),top_image)default_storage.save(os.path.join('static/trans/', uuid0, 'bottom_image.jpg'),bottom_image)cube_dice0 = cv2.imread(os.path.join('static/trans/', uuid0, 'front_image.jpg'))cube_dice1 = cv2.imread(os.path.join('static/trans/', uuid0, 'right_image.jpg'))cube_dice2 = cv2.imread(os.path.join('static/trans/', uuid0, 'backward_image.jpg'))cube_dice3 = cv2.imread(os.path.join('static/trans/', uuid0, 'left_image.jpg'))cube_dice4 = cv2.imread(os.path.join('static/trans/', uuid0, 'top_image.jpg'))cube_dice5 = cv2.imread(os.path.join('static/trans/', uuid0, 'bottom_image.jpg'))cube_dice1 = cv2.flip(cube_dice1, 1)cube_dice2 = cv2.flip(cube_dice2, 1)cube_dice4 = cv2.flip(cube_dice4, 0)res = py360convert.c2e([cube_dice0, cube_dice1, cube_dice2, cube_dice3, cube_dice4,cube_dice5], target_size_h, target_size_w, cube_format='list')cv2.imwrite(os.path.join('static/trans/', uuid0, 'panorama.jpg'),res, [int(cv2.IMWRITE_JPEG_QUALITY), quality_save])# 保存图片:第一种方式,自己配置下载到相应的地方;第二种下载到本地return JsonResponse({"error": 0,"message": "no error",# 这里下载图片,目前采用自己配置的环境"result": {"panorama": 'https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + uuid0 + '/panorama.jpg'}})else:return JsonResponse({"error": 1,"message": "Saving files error!","result": {}})else:return JsonResponse({"error": 1,"message": "method error","result": {}})

 

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

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

相关文章

LeetCode 1721. 交换链表中的节点(快慢指针)

文章目录1. 题目2. 解题1. 题目 给你链表的头节点 head 和一个整数 k 。 交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。 示例 1: 输入:head [1,2,3,4,5], k 2 输出&am…

[Python] NotImplemented 和 NotImplementedError 区别

NotImplemented 是一个非异常对象&#xff0c;NotImplementedError 是一个异常对象。 >>> NotImplemented NotImplemented >>> NotImplementedError <type exceptions.NotImplementedError>>>> type(NotImplemented) <type NotImplemented…

爬虫小案例:基于Bing关键词批量下载图片

一、需求&#xff1a; 基于Bing网站&#xff0c;输入关键词&#xff0c;批量下载图片保存到本地 二、演示&#xff1a; 三、直接上代码 import os import urllib.request import urllib.parse from bs4 import BeautifulSoup import re import time# 设置请求头 header {Us…

LeetCode 1722. 执行交换操作后的最小汉明距离(并查集)

文章目录1. 题目2. 解题1. 题目 给你两个整数数组 source 和 target &#xff0c;长度都是 n 。 还有一个数组 allowedSwaps &#xff0c;其中每个 allowedSwaps[i] [ai, bi] 表示你可以交换数组 source 中下标为 ai 和 bi&#xff08;下标从 0 开始&#xff09;的两个元素。…

线性表的顺序表示和实现

/* 顺序表存储结构容易实现随机存取线性表的第i 个数据元素的操作&#xff0c;但在实现插入、 删除的操作时要移动大量数据元素&#xff0c;所以&#xff0c;它适用于数据相对稳定的线性表&#xff0c;如职工工资 表、学生学籍表等。 c2-1.h 是动态分配的顺序表存储结构&#x…

爬虫小案例:基于Bing关键词批量下载图片(第二版)

一、需求&#xff1a; 基于Bing网站&#xff0c;输入关键词&#xff0c;批量下载图片保存到本地 二、代码展示&#xff1a; import requests from lxml import etree import os from multiprocessing.dummy import Pool import json from time import time# 作用&#xff1a…

LeetCode 1723. 完成所有工作的最短时间(DFS+剪枝 / 状态压缩DP)

文章目录1. 题目2. 解题2.1 DFS2.2 状态压缩DP265 / 3871&#xff0c; 前6.85% 前3题题解&#xff1a; LeetCode 5649. 解码异或后的数组&#xff08;位运算&#xff09;LeetCode 5652. 交换链表中的节点&#xff08;快慢指针&#xff09;LeetCode 5650. 执行交换操作后的最小…

运维工程师打怪升级进阶之路 V2.0

很多读者伙伴们反应总结的很系统、很全面&#xff0c;无论是0基础初学者&#xff0c;还是有基础的入门者&#xff0c;或者是有经验的职场运维工程师们&#xff0c;都反馈此系列文章非常不错&#xff01; 命名&#xff1a;《运维工程师打怪升级之路》 版本&#xff1a;V1.0版本…

win7优化设置_5项优化,至少提升20%!

Win7系统已经接近落幕的尾声了&#xff0c;不知大家是否早已做好准备了呢&#xff1f;很多朋友说win7不如win10好用&#xff0c;但马克思主义说到“新事物必将会取代旧事物”&#xff0c;也没必要一直坚守着win7的战线啦。自电脑升级了之后&#xff0c;便对win10系统进行了一些…

python实现两张图片横向和纵向拼接

本文实例为大家分享了python实现图片横向和纵向拼接的具体代码&#xff0c; 这里主要用Python扩展库pillow中Image对象的paste()方法把两张图片拼接起来供大家参考&#xff0c;具体内容如下&#xff1a; 一、代码&#xff1a; from PIL import Imagedef join(png1, png2, fl…

LeetCode 1203. 项目管理(两次拓扑排序)

文章目录1. 题目2. 解题1. 题目 公司共有 n 个项目和 m 个小组&#xff0c;每个项目要不无人接手&#xff0c;要不就由 m 个小组之一负责。 group[i] 表示第 i 个项目所属的小组&#xff0c;如果这个项目目前无人接手&#xff0c;那么 group[i] 就等于 -1。&#xff08;项目和…

BZOJ K大数查询(分治)(Zjoi2013)

题目链接&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id3110 Description 有N个位置&#xff0c;M个操作。操作有两种&#xff0c;每次操作如果是1 a b c的形式表示在第a个位置到第b个位置&#xff0c;每个位置加入一个数c如果是2 a b c形式&#xff0c;表示询…

为什么电脑不能打字_为什么不能用电脑验光仪测出来的度数直接配眼镜?

当今世界&#xff0c;科学技术爆炸式发展和进步&#xff0c;很多人问我&#xff1a;“电脑验光仪的准确度越来越高&#xff0c;会不会取代人工验光师&#xff1f;”我们这代人从小听着学着“科学技术是第一生产力”长大的&#xff0c;自然是技术崇拜者&#xff0c;自然的反应当…

前端DEMO:网络上流行的抖音罗盘

一、效果&#xff1a; 二、关于代码&#xff1a; CSS/demo.css代码&#xff1a; * {margin: 0;padding: 0; } html, body {width: 100%;height: 100%;background-color: black;overflow: hidden; } #clock {position: relative;width: 100%;height: 100%;background: black; }…

一个符合SEO优化标准的网站应具备哪些特征?

我们在进行网站建设时&#xff0c;都希望自己的网站能在搜索引擎中获得一个好的排名&#xff0c;都希望自己的网站能有很多的网页被百度等主流搜索引擎收录。要想获得搜索引擎的青睐&#xff0c;前提是要做好网站的SEO优化。那么&#xff0c;一个符合SEO优化标准的网站应该具备…

[Kaggle] Sentiment Analysis on Movie Reviews(BERT)

文章目录1. 预训练模型下载2. 数据集3. 加载预训练模型4. 提交结果练习地址&#xff1a;https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews 相关博文&#xff1a; [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff08;BERT&#xff09; 本文使用 hu…

Qt利用avilib实现录屏功能_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...

内容概览1.openlayers6结合geoserver利用WFS服务实现图层编辑功能2.源代码demo下载效果图如下&#xff1a;本篇主要是参照openlayers6结合geoserver利用WFS服务实现图层新增功能(附源码下载)基础上实现的&#xff0c;openlayers6通过调用geoserver发布的地图服务WFS来达到图层编…

Python 解决写入csv中间隔一行空行问题

一、问题描述&#xff1a;生成的csv文件每两行中间都有一行空白行 # 写入csv&#xff1a; with open(birth_weight_file,w) as f:writercsv.writer(f)writer.writerow(birth_header)writer.writerows(birth_data)f.close() 二、解决办法&#xff1a;写入后面加上newline wit…

LeetCode DD-2020006. 简单游戏(前缀和)

文章目录1. 题目2. 解题1. 题目 给出一个长度为 n 的数组 a&#xff0c;你需要在这个数组中找到一个长度至少为 m 的区间&#xff0c;使得这个区间内的数字的和尽可能小。 输入描述: 第一行包含一个正整数 n&#xff0c;m,表示数组的大小和所选区间的最小长度。(1<n<1…

【转载】OpenStack Swift学习笔记

免责声明&#xff1a; 本文转自网络文章&#xff0c;转载此文章仅为个人收藏&#xff0c;分享知识&#xff0c;如有侵权&#xff0c;请联系博主进行删除。 原文作者&#xff1a;崔炳华 原文地址&#xff1a;http://blog.csdn.net/i_chips/article/details/17787017 1 概…