选择最佳图像处理工具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,但是限制图片分辨率必须为下面三种1024x576、576x1024、768x768。项目基于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 依赖
2.1.3 实现 2.1.4 效果 基本上能满足压缩图片的需求,但色彩严重不饱和、画质较低,清晰度远远达不到原图。 Graphics2D绘图支持三种算法,但是效果大差不差。
2.2 Thumbnailator实现
2.2.1 说明 Thumbnailator是一个用于创建和处理缩略图的Java库。它提供了简单易用的 API,使开发人员能够快速地生成缩略图,并对其进行各种操作,如缩放、旋转、裁剪、水印等。
图像缩放,可以根据指定的尺寸生成缩略图图像裁剪,可以根据指定的区域裁剪原始图像。图像旋转、反转、水印、边框等功能
2.2.2 依赖
2.2.3 实现
2.2.4 效果 能满足压缩图片的需求,色彩同样严重不饱和、可以清晰的看到像素颗粒度很大。 和Graphics2D对比,画质效果提升不明显。
2.3 ImageJ实现
2.3.1 说明 ImageJ是一个开源的图像处理和分析软件,它提供了丰富的图像处理和分析工具,适用于科学研究、医学影像、工程图像处理等领域。
ImageJ 提供了丰富的图像处理工具,包括图像滤波、增强、分割、配准、变换等功能ImageJ 提供了多种图像分析工具,包括图像测量、轮廓分析、颜色分析、纹理分析等功能
2.3.2 依赖
2.3.3 实现 2.3.4 效果 满足压缩图片的需求,色彩饱和,光线强弱对比明显,衣服质感,表情还原基本不错。 观察脸部,手部、小兔子耳朵可以明显看到,存在锯齿轮廓,画质相对不错,但质量依然不高。
2.4 JAI(Java Advanced Imaging)实现
2.4.1 说明 Java 高级图像处理工具包(JAI)是用于在 Java 环境中处理图像和图形数据的库。
JAI 提供了丰富的图像处理和图形操作功能,包括图像过滤、变换、合成、校正、分析等。
2.4.2 依赖
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 依赖
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