/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* This software contains some transform algorithms to transform
* equirectangular panorama video frames to cubemap images
*/
#pragma once
#include "VideoFrameTransformHelper.h"
#include <map>
#include <string>
#include <thread>
#include <vector>
#include <opencv2/opencv.hpp>
struct SegmentFilteringConfig
{
SegmentFilteringConfig(
int inputLeft,
int inputTop,
int inputWidth,
int inputHeight) {
left = inputLeft;
top = inputTop;
width = inputWidth;
height = inputHeight;
}
int left, top, width, height;
};
class VideoFrameTransform
{
public:
explicit VideoFrameTransform(FrameTransformContext* ctx);
bool generateMapForPlane(
int inputWidth,
int inputHeight,
int outputWidth,
int outputHeight,
int transformMatPlaneIndex);
bool transformPlane(
const cv::Mat& inputMat,
cv::Mat& outputMat,
int outputWidth,
int outputHeight,
int transformMatPlaneIndex,
int imagePlaneIndex);
/// Transform API function for C
bool transformFramePlane(
uint8_t* inputData,
uint8_t* outputData,
int inputWidth,
int inputHeight,
int inputWidthWithPadding,
int outputWidth,
int outputHeight,
int outputWidthWithPadding,
int transformMatPlaneIndex,
int imagePlaneIndex);
private:
// Transforms normalized 3D vector to 2d cubemap coordinates
void transformCubeFacePos(
float tx,
float ty,
float tz,
float *outX,
float *outY);
// Transforms 3D vector to the input 2d coordinates
// Only supports CUBEMAP_32 and EQUIRECT formats
void transformInputPos(
float tx,
float ty,
float tz,
float inputPixelWidth,
float* outX,
float* outY);
bool transformPos(
float x,
float y,
float* outX,
float* outY,
int transformMatPlaneIndex,
float inputPixelWidth);
cv::Mat filterPlane(
const cv::Mat& inputMat,
int transformMatPlaneIndex,
int imagePlaneIndex);
void calcualteFilteringConfig(
int inputWidth,
int inputHeight,
int outputWidth,
int outputHeight,
int transformMatPlaneIndex);
void filterSegment(
const cv::Mat& inputMat,
cv::Mat& outputMat,
const cv::Mat& kernelX,
const cv::Mat& kernelY,
int left,
int top,
int width,
int height,
int imagePlaneIndex);
void generateKernelsAndFilteringConfigs(
int startTop,
int startBottom,
float sigmaY,
const cv::Mat& kernelY,
int baseSegmentHeight,
int inputWidth,
int inputHeight,
int transformMatPlaneIndex);
void generateKernelAndFilteringConfig(
int top,
int bottom,
float angle,
float sigmaY,
const cv::Mat& kernelY,
int inputWidth,
int inputHeight,
int transformMatPlaneIndex);
void runFiltering(
const cv::Mat& inputMat,
cv::Mat& blurredPlane,
int transformMatPlaneIndex,
int imagePlaneIndex,
int leftOffset,
int topOffset,
std::vector<std::thread>& segmentFilteringThreads);
FrameTransformContext ctx_;
/// Map of <transformMatPlaneIndex, transform mat>
std::map<int, cv::Mat> warpMats_;
/// Map of <transformMatPlaneIndex, vector of 1D filter kernels
/// along X (horizontal) direction> for filtering frame plane
/// Same for Y (vertical) direction
std::map<int, std::vector<cv::Mat>> filterKernelsX_,
filterKernelsY_;
/// Map of <transformMatPlaneIndex, vector of config parameters>
/// for filtering frame plane
std::map<int, std::vector<SegmentFilteringConfig>> segmentFilteringConfigs_;
};
facebook开源全景投影转换Transform360
需积分: 43 86 浏览量
2017-09-22
15:13:28
上传
评论 1
收藏 87KB ZIP 举报
EthanXZhang
- 粉丝: 68
- 资源: 8
最新资源
- 基于python开发的口红色号识别程序+源码+开发文档+源码解析(毕业设计&课程设计&项目开发)
- TP-LINK TL-WN725N V3 Linux 驱动
- 020ssm-jsp-mysql班级同学录网站.zip(可运行源码+数据库文件+文档)
- 什么是stm32f103rct6,有哪些优缺点?
- 李明哲尚能2.zip
- 019ssm-jsp-mysql奥迪维修保养服务管理系统.zip(可运行源码+数据库文件+)
- AB测试数据-增设中小店铺广告位
- YOLOv8红外场景的车辆-行人-斑马线-交通灯检测+数据集+pyqt界面
- 基于JSP毕业设计-OA办公自动化系统-毕业设计.zip
- 基于JSP毕业设计-MVC设计模式应用之游戏卡在线销售系统(论文).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈