java 图片裁剪与合并

前言

在使用阿里云人数检测时,为降低成本,我们需要将两个图片合并成一张图片,提交给阿里云图像识别,但我发现识别时由于一些感染因素,会有一定的错误率,所以就需要将图片进行裁剪后再拼接。

具体操作逻辑:

  1. 首先将图片裁剪
  2. 将裁剪后的图片合并(这里测试用的是原图+裁剪后的图)
  3. 后续业务操作

代码如下

/*** 裁剪(多边形)** @param inputFilePath 图片输入路径* @param outFilePath   图片输出路径* @param x             x轴坐标点数组* @param y             y轴坐标点数组* @param n             坐标点数量* @throws IOException*/public static void cutPolygonImage(String inputFilePath, String outFilePath, int[] x, int[] y, int n) {FileInputStream fileInputStream = null;FileOutputStream fileOutputStream = null;try {fileInputStream = new FileInputStream(inputFilePath);fileOutputStream = new FileOutputStream(outFilePath);cutPolygonImage(fileInputStream, fileOutputStream, x, y, n);} catch (FileNotFoundException e) {throw new RuntimeException(e);} finally {if(fileInputStream != null){try {fileInputStream.close();} catch (IOException e) {}}if(fileOutputStream != null){try {fileOutputStream.close();} catch (IOException e) {}}}}/*** 裁剪(多边形)** @param inputFilePath 图片输入路径* @param outFilePath   图片输出路径* @param x             x轴坐标点数组* @param y             y轴坐标点数组* @param n             坐标点数量* @throws IOException*/public static void cutPolygonImage(InputStream inputFilePath, OutputStream outFilePath, int[] x, int[] y, int n) {try {BufferedImage image = ImageIO.read(inputFilePath);GeneralPath clip = new GeneralPath(GeneralPath.WIND_EVEN_ODD, n);clip.moveTo(x[0], y[0]);for (int i = 1; i < x.length; i++) {clip.lineTo(x[i], y[i]);}clip.closePath();Rectangle bounds = clip.getBounds();BufferedImage img = new BufferedImage(bounds.width, bounds.height, BufferedImage.TYPE_INT_BGR);Graphics2D g2d = img.createGraphics();g2d.translate(-bounds.getMinX(), -bounds.getMinY());g2d.setComposite(AlphaComposite.SrcOver);g2d.setClip(clip);g2d.drawImage(image, 0, 0, null);g2d.dispose();ImageIO.write(img, "jpg", outFilePath);} catch (Exception e) {log.error("图片错误",e);}}/*** 图片合并* @param image1 图片1* @param image2 图片2* @param outputStream 输出位置*/public static void splicingImage(BufferedImage image1, BufferedImage image2,OutputStream outputStream) {int width = image1.getWidth() + image2.getWidth();int height = NumberUtil.max(image1.getHeight(), image2.getHeight());BufferedImage combinedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);Graphics2D g = combinedImage.createGraphics();g.drawImage(image1, 0, 0, null);g.drawImage(image2, image1.getWidth(), 0, null);try {ImageIO.write(combinedImage, "PNG", outputStream);} catch (IOException e) {throw new RuntimeException(e);}}public static void main(String[] args) {int[] x = { 1491, 1491, 143,143};int[] y = { 0, 1000, 1000,0};cutPolygonImage("D:\\logs\\wallhaven-rdmzg7.png", "D:\\logs\\wallhaven-rdmzg8.png", x, y, 4);try {BufferedImage image1 = ImageIO.read(new File("D:\\logs\\wallhaven-rdmzg7.png"));BufferedImage image2 = ImageIO.read(new File("D:\\logs\\wallhaven-rdmzg8.png"));splicingImage(image1, image2,new FileOutputStream("D:\\logs\\wallhaven-rdmzg9.png"));} catch (IOException e) {throw new RuntimeException(e);}}

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

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

相关文章

BearPi Std 板从入门到放弃 - 先天神魂篇(3)(RT-Thread I2C设备 读取光照强度BH1750)

简介 使用BearPi IOT Std开发板及其扩展板E53_SC1&#xff0c; SC1上有I2C1 的光照强度传感器BH1750 和 EEPROM AT24C02&#xff0c; 本次主要就是读取光照强度; 主板: 主芯片: STM32L431RCT6LED : PC13 \ 推挽输出\ 高电平点亮串口: Usart1I2C使用 : I2C1E53_SC1扩展板 : LE…

约束系数的四舍五入引起的模型数值问题

在数学模型的求解当中&#xff0c;常常会出现各式各样的数值问题&#xff0c;包括模型的求解结果不稳定、产生不合理的结果或者底层算法的表现与收敛性都不符合预期等问题&#xff0c;引起这些问题的原因很多种&#xff0c;其中&#xff0c;在建模时&#xff0c;对约束系数的精…

基于网络爬虫技术的网络新闻分析

目录 前言 一、网络爬虫技术 二、代理IP 三、网络新闻分析 总结&#xff1a; 前言 随着互联网的发展和普及&#xff0c;网络新闻成为人们获取信息的重要途径。然而&#xff0c;由于网络新闻的数量庞大&#xff0c;分析和处理这些新闻变得愈发困难。本文将介绍如何使用网络…

竞赛保研 python的搜索引擎系统设计与实现

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python的搜索引擎系统设计与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;5分创新点&#xff1a;3分 该项目较为新颖&#xff…

冥想第一千零九天

1.周日&#xff0c;今天睡到自然醒&#xff0c;媳妇嫌弃在家里太闷了&#xff0c;让后去公园转了一圈我跑了6公里&#xff0c;心率很高&#xff0c;好在稳定&#xff0c;晚上给溪溪桐桐拼了拼图。给溪溪刷了鞋子。※ 2.早上给溪溪桐桐领了巧克力。 3.感谢父母&#xff0c;感谢朋…

代码随想录算法训练营第55天| 392.判断子序列 115.不同的子序列

JAVA代码编写 392.判断子序列 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"…

Linux服务器性能优化小结

文章目录 生产环境监测常见专业名词扫盲服务器平均负载服务器平均负载的定义如何判断平均负载值以及好坏情况如果依据平均负载来判断服务器当前状况系统平均负载和CPU使用率的区别 CPU上下文切换基本概念3种上下文切换进程上下文切换线程上下文切换中断上下文切换 查看上下文切…

Java后端问题排查经验

线上出现问题首先应该做什么&#xff0c;不是解决问题&#xff0c;而是先恢复系统&#xff0c;把损失降到最小&#xff0c;有机会的话保留日志等数据用于后期问题复盘分析。解决问题可以后期慢慢复现排查&#xff0c;而线上用户的体验则不能多耽误一分一秒&#xff0c;任何线上…

监理工程师通过率是多少?如何提高监理的通过率?

监理工程师通过率是多少&#xff1f; 监理工程师考试通过率在30%-40%左右。 监理工程师考试科目包括建设工程合同管理、目标控制、建设工程监理基本理论与法规、建设工程监理案例分析&#xff0c;这4个科目所涵盖的内容非常的广&#xff0c;包含了有关于合同法建设的知识和内…

word怎么分页?学会这几招,轻松掌握分页功能!

Microsoft Word作为办公文档处理的主力工具&#xff0c;其强大的排版功能为用户提供了丰富的文档编辑体验。其中&#xff0c;分页是一个常用但可能被忽视的重要功能&#xff0c;能够使文档结构更清晰、更易读。本文将向您介绍word怎么分页的三种方法&#xff0c;帮助您更好地掌…

Linux消息队列 msgget()、msgsend()、msgrcv()、msgctl()

一、消息队列 1、消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 2、每个数据块都被认为是有一个类型&#xff0c;接收者进程接收的数据块可以有不同的类型值 3、消息队列与管道不同的是&#xff0c;消息队列是基于消息的&#xff0c;而管道是基于字节流的&…

目标跟踪 MOT数据集和可视化

目录 MOT15数据集格式简介 gt可视化 本人修改的GT可视化代码&#xff1a; MOT15数据集格式简介 以下内容转自&#xff1a;【目标跟踪】MOT数据集GroundTruth可视化-腾讯云开发者社区-腾讯云 MOT15数据集下载&#xff1a;https://pan.baidu.com/s/1foGrBXvsanW8BI4eybqfWg?…

github打不开的几种解决方案

github打不开的几种解决方案 参考文章 GitHub 加速镜像 以下是两个免费的 GitHub 公益加速项目 kkgithub.com仅需在 github.com 的 g 前加上 kk&#xff0c;就可正常访问 GitHub。 例如&#xff1a; https://github.com/tldraw/tldraw 将链接更换后&#xff1a; https://…

codeforces C. Largest Subsequence

思路 首先是要选出 L a r g e s t S u b s e q u e n c e Largest Subsequence LargestSubsequence &#xff0c;第一个字符是整个串最大的&#xff0c;第二个是第一个的位置后面最大的 … \dots … &#xff0c;我用的是优先队列第一关键字大小&#xff0c;第二关键字位置。…

C语言学习第二十六天(算法的时间复杂度和空间复杂度)

1、算法效率 衡量一个算法的好坏&#xff0c;是从时间和空间两个方面来衡量的&#xff0c;换句话说就是从时间复杂度和空间复杂度来衡量的 这里需要补充一点&#xff1a;时间复杂度是衡量一个算法的运行快慢&#xff0c;空间复杂度是主要衡量一个算法运行所需要的额外空间。 …

【操作系统】实验五 文件系统

实验目的&#xff1a; 1. 掌握文件系统的基本概念和工作机制 2. 掌握文件系统的主要数据结构的实现 3、掌握软件系统实现算法 实验内容&#xff1a; 设计并实现一个虚拟的一级&#xff08;单用户&#xff09;文件系统程序 提供以下操作 1、文件创建/删除接口命令 2、目录创建/删…

Java基于微信小程序的小区车位租赁系统的设计与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 简介技术路线需求分析用户信息管理车位信息管理车位申请管理论坛信息管理 效果图推荐阅读 简介 …

【强化学习-读书笔记】动态规划(策略评估、价值迭代、策略迭代算法)

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. Barto动态规划 (Dynamic Programming, DP) 是一类优化方法&#xff0c;在给定一个用马尔可夫决策过程 (MDP) 描述的完备环境模型的情况下&#xff0c;其可以计算最优的策…

优化问题笔记(2)

目录 3. 约束优化问题的全局解3.1 凸优化问题3.2 二次优化问题3.3 无约束二次优化问题3.4 一个典型的二次等式约束二次优化问题 Reference 3. 约束优化问题的全局解 3.1 凸优化问题 局部解成为全局解的一类重要的优化问题是所谓凸优化问题. 我们称优化问题 ( f , D ) (f,\ma…

算法-动态规划

动态规划算法 应用场景-背包问题 介绍 动态规划(Dynamic Programming)算法的核心思想是&#xff1a;将大问题划分为小问题进行解决&#xff0c;从而一步步获取最优解的处理算法动态规划算法与分治算法类似&#xff0c;其基本思想也是将待求解问题分解成若干个子问题&#xff0…