一、需求:

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

二、主要知识: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": {}})

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

  1. 使用idea编写SparkStreaming消费kafka中的数据,并对数据进行某一指标的处理【小案例】(五)

    接    使用idea编写SparkStreaming消费kafka中的数据[小案例](四) https://georgedage.blog.csdn.net/article/details/1035 ...

  2. 使用idea编写SparkStreaming消费kafka中的数据【小案例】(四)

    继续接     使用idea编写消费者,接收生产者的持续日志输出[小案例](三) https://georgedage.blog.csdn.net/article/details/103506165 ...

  3. 使用idea编写消费者,接收生产者的持续日志输出【小案例】(三)

    在   用idea编写代码作为生产者,Kafka接收其[持续]发来的广告日志信息[小案例](二) https://georgedage.blog.csdn.net/article/details/10 ...

  4. 用idea编写代码作为生产者,Kafka接收其【持续】发来的广告日志信息【小案例】(二)

    接我们上一篇使用idea编写代码作为生产者,Kafka接收其发来的信息[小案例](一) https://georgedage.blog.csdn.net/article/details/1035034 ...

  5. Python小案例(六)通过熵权法计算指标权重

    Python小案例(六)通过熵权法计算指标权重 在日常业务中,产品运营需要综合多个指标进行判断,如果没有目标变量进行监督训练的话,很难人为地判断哪个指标更好,综合起来哪个类别更优秀. 这里介绍一种基于 ...

  6. 使用idea编写代码作为生产者,Kafka接收其发来的信息【小案例】(一)

    对于这个小案例,简单来个图示, 友情补充pom <dependencies><dependency><groupId>org.apache.spark</gr ...

  7. 敏态下“骨架化、模块化”测试案例编写技术实践

    文/叶婷婷 罗章坤 一.引言 随着互联网金融监管的日益严格.市场竞争的不断加剧及客户需求的快速变化,金融企业IT系统的复杂程度不断提高,IT需求日益放大,创新型需求持续产生.传统的软件开发模式,诸如瀑 ...

  8. JQuery的几个简单小案例(基础)

    JQuery的几个简单小案例 实现表格的的隔行换色 实现复选框的全选与全不选 QQ表情的选择 多选下拉列表的左右移动 实现表格的的隔行换色 需求:事先制作一个如图所示的table表格,将数据行的奇数行 ...

  9. web分页显示功能(“小案例:实现web端对客户资源的增删改查”里面的一个功能)

    分页显示功能("小案例:实现web端对客户资源的增删改查"里面的一个功能) (2016年11月19日18:15:07 上课学习总结) 效果展示: 第n页/共M页   首页  上一页 ...

最新文章

  1. 造成机器学习项目失败的7个原因
  2. android 服务器异步回调,android – 如何从异步任务返回结果
  3. [Spring入门学习笔记][静态资源]
  4. Pokémon Go数据收集是否带来隐私问题
  5. [BZOJ1833][ZJOI2010]Count数字计数(DP)
  6. (王道408考研数据结构)第五章树-第四节4:红黑树基本概念及操作
  7. ADO.NET编程(4)根据条件查询DataTable的值
  8. jQuery加载js脚本
  9. 光流(五)--HS光流及稠密光流
  10. vbs整人代码蓝屏_vbs整人程序大全
  11. uniapp:微信小程序地图功能
  12. 软件智能:aaas系统的 AI服务功能:大纲图的无意识代理功能和八卦图的关系
  13. CentOS7系统清理缓存数据命令
  14. 软件开发七宗罪(转)
  15. 谷歌浏览器崩溃解决办法
  16. python如何获取列表的长度
  17. snmp 获得硬件信息_网络管理员之软硬件安装
  18. 模型转换、模型压缩、模型加速工具汇总
  19. 数字系统实验:三位数码管
  20. 2D(横版)游戏开发心得

热门文章

  1. source insight怎样恢复默认界面设置
  2. Day 02 第二天课时总结
  3. Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!
  4. bzoj 1058: [ZJOI2007]报表统计
  5. MYSQL基础十一--存储引擎
  6. 【转】【Linux】linux awk命令详解
  7. bzoj1053: [HAOI2007]反素数ant
  8. [设计模式]6. C++与职责链模式(chain of rsponsibility pattern)
  9. CentOS 7 gedit编辑器中文乱码解决方法
  10. hoj2677 Instruction Set // poj3253Fence Repair 哈夫曼树