当前位置: 首页 > news >正文

选择最佳图像处理工具OpenCV、JAI、ImageJ、Thumbnailator和Graphics2D

文章目录

    • 1、前言
    • 2、 图像处理工具效果对比
      • 2.1 Graphics2D实现
      • 2.2 Thumbnailator实现
      • 2.3 ImageJ实现
      • 2.4 JAI(Java Advanced Imaging)实现
      • 2.5 OpenCV实现
    • 3、图像处理工具结果

1、前言

    SVD(stable video diffusion)开放了图生视频的API,但是限制图片分辨率必须为下面三种1024x576576x1024768x768。项目基于Fooocus生成的图片分辨率不满足,然后基于ImageIO+Graphics2D处理了一下,修改图片分辨率,然后再去生成视频。功能调通了,但是发现图片清晰度严重下降。效果如下所示。
    看了下Windows自带画图工具修改分辨率大小功能,修改后的图片清晰度基本上能和原图一致。这个Graphics2D质量差的多。
    然后分析了五种常用的Java图像处理工具:Graphics2D、ImageJ、JAI、OpenCV和Thumbnailator。通过了解它们的基础知识和Java对接实现,对比下来,在修改分辨率后,图片清晰度最高的是OpenCV。图片处理质量依次为OpenCV>JAI>ImageJ>thumbnailator>Graphics2D

  • Fooocus生成图片1536 x 2560

在这里插入图片描述

  • Graphics2D修改分辨率后的图片576 x 1024

在这里插入图片描述

2、 图像处理工具效果对比

    此处对一张图片,分别使用五种工具处理,进行结果比对。
    原图如下:1280 x 768分辨率,要求处理为一张1024 x 576的图片。输出图片质量要求尽可能的高。
在这里插入图片描述

2.1 Graphics2D实现

2.1.1 说明
    Graphics2D是Java中的2D图形API,用于绘制和操作图形。
    使用Graphics2D可以轻松地修改图像的分辨率,使用的是插值算法重新绘制图片,但是图片失真严重。
    如果图片是webp格式,需要引入下面依赖以兼容webp格式。
2.1.2 依赖

        <dependency><groupId>com.twelvemonkeys.imageio</groupId><artifactId>imageio-webp</artifactId><version>3.10.1</version></dependency>

2.1.3 实现
在这里插入图片描述
2.1.4 效果
    基本上能满足压缩图片的需求,但色彩严重不饱和、画质较低,清晰度远远达不到原图。
    Graphics2D绘图支持三种算法,但是效果大差不差。
在这里插入图片描述

2.2 Thumbnailator实现

2.2.1 说明
    Thumbnailator是一个用于创建和处理缩略图的Java库。它提供了简单易用的 API,使开发人员能够快速地生成缩略图,并对其进行各种操作,如缩放、旋转、裁剪、水印等。

  • 图像缩放,可以根据指定的尺寸生成缩略图
  • 图像裁剪,可以根据指定的区域裁剪原始图像。
  • 图像旋转、反转、水印、边框等功能

2.2.2 依赖

        <dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.9</version></dependency>

2.2.3 实现
在这里插入图片描述

2.2.4 效果
    能满足压缩图片的需求,色彩同样严重不饱和、可以清晰的看到像素颗粒度很大。
    和Graphics2D对比,画质效果提升不明显。
在这里插入图片描述

2.3 ImageJ实现

2.3.1 说明
    ImageJ是一个开源的图像处理和分析软件,它提供了丰富的图像处理和分析工具,适用于科学研究、医学影像、工程图像处理等领域。

  • ImageJ 提供了丰富的图像处理工具,包括图像滤波、增强、分割、配准、变换等功能
  • ImageJ 提供了多种图像分析工具,包括图像测量、轮廓分析、颜色分析、纹理分析等功能

2.3.2 依赖

        <dependency><groupId>net.imagej</groupId><artifactId>ij</artifactId><version>1.54i</version></dependency>

2.3.3 实现
在这里插入图片描述
2.3.4 效果
    满足压缩图片的需求,色彩饱和,光线强弱对比明显,衣服质感,表情还原基本不错。
    观察脸部,手部、小兔子耳朵可以明显看到,存在锯齿轮廓,画质相对不错,但质量依然不高。
在这里插入图片描述

2.4 JAI(Java Advanced Imaging)实现

2.4.1 说明
    Java 高级图像处理工具包(JAI)是用于在 Java 环境中处理图像和图形数据的库。

  • JAI 提供了丰富的图像处理和图形操作功能,包括图像过滤、变换、合成、校正、分析等。

2.4.2 依赖

        <dependency><groupId>javax.media</groupId><artifactId>jai-core</artifactId><version>1.1.3</version></dependency><dependency><groupId>com.sun</groupId><artifactId>jai_codec</artifactId><version>1.1.3</version></dependency>

2.4.3 实现
在这里插入图片描述
2.4.4 效果
    整体看起来,没有大问题。面部表情细腻,头发、瓶子、手部、后面的光线等能达到较高的清晰度。
在这里插入图片描述

2.5 OpenCV实现

2.5.1 说明
    OpenCV(Open Source Computer Vision Library)是一个开源的跨平台计算机视觉库,它提供了丰富的图像处理和计算机视觉算法,可用于开发各种视觉任务的应用程序。

  • 提供了易于使用的 C++、Python 和 Java 接口简单易用
  • 底层实现采用了高效的 C/C++ 编写,拥有较高的性能
  • 功能库非常丰富,提供了超过 2500 个优化过的图像处理和计算机视觉算法,涵盖了各种任务,包括图像处理、特征检测、物体识别、人脸识别、目标跟踪、摄像头校正等
    2.5.2 依赖
        <dependency><groupId>org.openpnp</groupId><artifactId>opencv</artifactId><version>4.9.0-0</version></dependency>

2.5.3 实现

  • java.lang.UnsatisfiedLinkError: no opencv_java490 in java.library.path问题处理

    在Windows下开发,需要下载安装OpenCV,下载地址:https://opencv.org/releases/
    以OpenCV – 4.9.0版本为例,在windows x64系统下找到安装路径下的动态链接库文件{home}\opencv\build\java\x64\opencv_java490.dll,移动至java.library.path下,此处移动至JDK的bin路径下即可。
    在linux下库文件是{home}/opencv-4.9.0/build/lib/libopencv java490.so文件

// 查看Java库文件路径
System.getProperty("java.library.path")

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
2.5.4 效果

在这里插入图片描述
    对比JAI,效果好像没有大的提升,我们放大3倍来看。左侧为JAI,右侧为OpenCV。
    OpenCV画质更高,没有明显的模糊区域。JAI存在一定的糊状效果。
在这里插入图片描述

3、图像处理工具结果

    仅针对图片分辨率调整处理结果来说,从画质清晰度、色彩、面部表情、阳光、手部细节等角度看,整体效果OpenCV>JAI>ImageJ>Thumbnailator>Graphics2D
    对于OpenCV有更多功能,也很强大,此处仅针对绘图进行比对,更多功能等待后续探索。

参考文章:代码片-OpenCV、JAI、ImageJ、Thumbnailator和Graphics2D
Powered By niaonao

相关文章:

  • 万象奥科携手RT-Thread,线下体验RK3568混合部署!
  • 21个最佳照明设计软件
  • 【学不动系列】lint-staged 使用教程
  • layui框架实战案例(25):laydate中mark的数据后端生成
  • 分别使用TCP/UDP实现互相实时发送消息,接收消息功能
  • Numpy、Matplotlib、Pandas常用函数
  • ActiViz中的数据集vtkPolyData
  • 【c++】类和对象(二)this指针
  • yoloV3的目标检测_3.11
  • Copilot for Microsoft365使用体验
  • MyBatis框架解析与优化
  • 2024-03-25 商业分析-窃取他人商业环节-抢夺他人市场
  • 牛客周赛 Round 38 C.小红的字符串构造【构造】
  • AI视频渲染原理是什么?
  • 柯桥专业会计培训|会计实操做账手工账电脑账出纳报税手把手教
  • Apache的基本使用
  • classpath对获取配置文件的影响
  • css布局,左右固定中间自适应实现
  • DOM的那些事
  • iOS 颜色设置看我就够了
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java Agent 学习笔记
  • PHP 小技巧
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Spring声明式事务管理之一:五大属性分析
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue自定义指令实现v-tap插件
  • 回顾 Swift 多平台移植进度 #2
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 使用 QuickBI 搭建酷炫可视化分析
  • 微信小程序填坑清单
  • 我有几个粽子,和一个故事
  • 阿里云移动端播放器高级功能介绍
  • 回归生活:清理微信公众号
  • ​力扣解法汇总946-验证栈序列
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #微信小程序:微信小程序常见的配置传值
  • (06)金属布线——为半导体注入生命的连接
  • (JS基础)String 类型
  • (独孤九剑)--文件系统
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (七)Knockout 创建自定义绑定
  • (七)理解angular中的module和injector,即依赖注入
  • (万字长文)Spring的核心知识尽揽其中
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)人的集合论——移山之道
  • *上位机的定义
  • .gitignore文件—git忽略文件
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET多线程执行函数