java 全景_java实现,使用opencv合成全景图,前端使用krpano展示

这周花三天做了一demo,算上之前的,怎么也有五天,上一篇是opencv介绍,以及定义native方法,通过本地图片路径传参,底层调用Opencv图像库合成,有兴趣的可以看看,这篇重点在于krpano的全景图展示,话说刚才上传了22张片照片合成全景图,感觉有半个小时也没有合成完,我这电脑是有多垃圾

那我们代码走一走(都说不上代码是老流氓)

55ea38c7c0b88a334de9c9d4b614d13a.png

这是demo的目录结构

@Controller

public class PanoramaController {

/**

* @Description: 文件上传以及全景合成

* @Date: 15:58 2018/7/6

* @Params: * @param null

*/

@RequestMapping("/upload")

public ModelAndView login07(@RequestParam(value = "file", required = false)MultipartFile[] files,

@RequestParam(value = "title",defaultValue = "未命名") String title,HttpServletRequest request) {

ModelAndView mv=new ModelAndView("success.html");

MultipartFile tempMultipartFile;

//基本路径

StringBuffer sb=new StringBuffer();

String baseURL="E:/demo";

String tempStr = "/" + UUID.randomUUID().toString();

for (int j = 0; j < files.length; j++) {

tempMultipartFile = files[j];

// 获得上传的文件名称-带有后缀

String fileNameAndSuffixName = tempMultipartFile.getOriginalFilename();

// 获取上传的文件名称

//String fileName = fileNameAndSuffixName.substring(0, fileNameAndSuffixName.lastIndexOf("."));

String urlPath;

urlPath = Imgeupload.fileUpdata(tempMultipartFile, "E:/demo", "" + tempStr);

System.out.println("=====" + urlPath);

if (j==files.length-2){

sb.append(baseURL+tempStr+"/"+urlPath);

break;

}else if (j

sb.append(baseURL+tempStr+"/"+urlPath+",");

}else {

System.out.println();

}

}

//拼接URL

System.out.println("拼接URL"+sb.toString());

//调用native

String result= OpenCVUtil.changeArrValue(sb.toString());

if(!result.contains(",")){

mv.setViewName("failure.html");

return mv;

}

//System.out.println(result);

//复制图片

String basedirNew=UUID.randomUUID().toString()+","+title;

String dirNew="D:\\tupian\\img\\"+basedirNew+"\\";

try {

copyFile(new File("D:/result.jpg"),new File(dirNew+title+".jpg"),dirNew);

} catch (IOException e) {

e.printStackTrace();

}

mv.addObject("imgUrl","/img/"+basedirNew+"/"+title+".jpg");

mv.addObject("title",title);

mv.addObject("fileName",basedirNew);

return mv;

}

@RequestMapping("/index")

public String login06() {

return "upload.html";

}

/**

* @Description: 复制生成的图片到全景图静态区

* @Date: 9:45 2018/7/5

* @Params: * @param null

*/

public void copyFile(File fromFile, File toFile,String fromUrl) throws IOException {

File file=new File(fromUrl);

if (!file.exists()) {

file.mkdir();

}

FileInputStream ins = new FileInputStream(fromFile);

FileOutputStream out = new FileOutputStream(toFile);

byte[] b = new byte[1024];

int n=0;

while((n=ins.read(b))!=-1){

out.write(b, 0, n);

}

ins.close();

out.close();

}

}

这个主要是文件上传以及全景图合成调用native,生成result.jpg全景图,利用生成的全景图通过krpano工具,生成相应的文件放在tomcat对应webapp,启动tomcat即可访问,这是最开始使用krpano看效果的流程,当然java项目不可能手动复制粘贴文件吧,一切都是通过程序控制,所以不可避免java IO操作,这时遇到一个很大的坑,听我细细道来

当时想已经通过krpano生成的相应的文件复制到webapp这部分的操作通过io进行操作,后来才发现,用IO发现权限不够,我使用的是spring boot 项目,tomcat是嵌入式,所以复制到当前项目classes文件下,那换一条路既然生成的都是静态文件,那从当前的项目,引用绝对路径,从本地获取静态资源,呵呵,通过指定端口当用的项目,静态资源权限只限当前项目,从网上收集许多资料,最终使用

spring:

resources:static-locations: //相当于,这块空间和static目录下,resource下,webjar下同级,

//而这块空间可以io进行操作

好了,这个问题解决了,那java代码如何将某个图片拖到本地某个应用XX.bat上看如下代码

public class CmdBat {

/*public static void main(String[] args) {

Room r = new Room();

//项目的位置

String dpath = "D:\\tupian\\vshow";

//全景图的位置

String file = "3";

String[] fn1 = { "2",

"3" };

String[] fn2 = { "客厅", "卧室","大客厅" };

String title = "哈哈哈哈哈哈哈哈";

String music = "vshow/backgroundmusic/default.mp3";

try {

setKrpano(r,dpath, file, fn1, fn2, title,music);

} catch (InterruptedException e) {

e.printStackTrace();

System.out.println("上传失败");

}

}*/

/**

* @De

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值