纯java实现全景图切割(无需opencv)

现在博客上面看到的都是opencv的,opencv还要安装它的组件库太麻烦,linux环境还好,如果上镜像环境,安装是个大麻烦。所以改造成去掉opencv的。
全景图切成六个面
private BufferedImage sideCubeMapImage(int width,int height,int type, int sideId, int sideWidth, int sideHeight,String saveUrl, int[] rgbArray) {
        log.error("==========handle " + sideId + " start ===========");
        double[][] imageTransform =
                {
                        {0, 0},
                        {Math.PI / 2, 0},
                        {Math.PI, 0},
                        {-Math.PI / 2, 0},
                        {0, -Math.PI / 2},
                        {0, Math.PI / 2}
                };
        // 新的图片坐标点与原始图片坐标的映射关系
        double[][] mapx = new double[sideHeight][sideWidth];
        double[][] mapy = new double[sideHeight][sideWidth];
        //计算相邻ak和相反an的三角形张成球体中心
        final double an = Math.sin(Math.PI / 4);
        final double ak = Math.cos(Math.PI / 4);

        double ftu = imageTransform[sideId][0];
        double ftv = imageTransform[sideId][1];

        //对于每个像素点计算相应的源坐标,具体计算公式参考球面转立方体映射
        for (int y = 0; y < sideHeight; y++) {
            for (int x = 0; x < sideWidth; x++) {
                //将坐标映射在平面上
                float nx = (float) y / (float) sideHeight - 0.5f;
                float ny = (float) x / (float) sideWidth - 0.5f;

                nx *= 2;
                ny *= 2;

                nx *= an;
                ny *= an;

                double u, v;

   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值