当前位置: 首页 > 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

相关文章:

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

文章目录 1、前言2、 图像处理工具效果对比2.1 Graphics2D实现2.2 Thumbnailator实现2.3 ImageJ实现2.4 JAI&#xff08;Java Advanced Imaging&#xff09;实现2.5 OpenCV实现 3、图像处理工具结果 1、前言 SVD(stable video diffusion)开放了图生视频的API&#xff0c;但是限…...

微信小程序版本更新检测

app.vue文件 <script>export default {onLaunch: function() {console.log(App Launch)// #ifdef MP-WEIXINthis.getUpdateManager();// #endif},methods: {// 检测小程序更新getUpdateManager() {const updateManager wx.getUpdateManager();updateManager.onCheckFor…...

【每日力扣】343. 整数拆分与63. 不同路径 II

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害 343. 整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使…...

洛谷 Cut Ribbon

思路&#xff1a;我们可以看出&#xff0c;这是一道完全背包问题&#xff0c;但是呢&#xff0c;有一点需要注意&#xff1a;那就是我们在装背包的时候并不能保证一定能装满背包&#xff0c;但是这里的背包要求是让我们装满的&#xff0c;所以我们需要判断这个背包装满才行&…...

#AS,idea,maven,gradle

Jdk,sdk。提前都是需要下好的。 Maven与gradle的思考&#xff1a; 用AS开发app时&#xff0c;gradle本就有&#xff0c;自己也可以指定&#xff0c;AGP同样。要注意gradle&#xff0c;AGP,jdk版本的事情。还有依赖库。 用idea开发网络程序时&#xff0c;也有内置的maven&…...

FPGA结构与片上资源

文章目录 0.总览1.可配置逻辑块CLB1.1 6输入查找表&#xff08;LUT6&#xff09;1.2 选择器&#xff08;MUX&#xff09;1.3 进位链&#xff08;Carry Chain&#xff09;1.4 触发器&#xff08;Flip-Flop&#xff09; 2.可编程I/O单元2.1 I/O物理级2.2 I/O逻辑级 3.布线资源4.其…...

【分布式】——分布式事务

分布式事务 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/tree-learning-notes ⭐⭐⭐⭐⭐⭐ Spring专栏&#x1f449;https://blog.csdn.net/weixin_53580595/category_12279588.html SpringMVC专…...

第6章:“让我们思考这个”的提示

“让我们思考这个”这一提示词&#xff0c;是深度对话的钥匙&#xff0c;鼓励ChatGPT生成反思性、沉思性的文本。 对于论文写作、诗歌创作或创意任务的完成&#xff0c;非常实用。 当你想要深究某主题时&#xff0c;只需向ChatGPT提问。 它会基于提示&#xff0c;结合算法和…...

安卓Activity上滑关闭效果实现

最近在做一个屏保功能&#xff0c;需要支持如图的上滑关闭功能。 因为屏保是可以左右滑动切换的&#xff0c;内部是一个viewpager 做这个效果的时候&#xff0c;关键就是要注意外层拦截触摸事件时&#xff0c;需要有条件的拦截&#xff0c;不能影响到内部viewpager的滑动处理…...

使用conda管理python环境

为什么需要管理环境&#xff1f; 每个python程序依赖的库版本可能不同&#xff0c;因此我们需要隔离不同的环境。 创建环境&#xff1a; conda create --name myenv python3.8这将创建一个名为myenv的新环境&#xff0c;并在其中安装Python 3.8版本。 列出所有环境&#xf…...

MR混合现实情景实训教学系统在军事演练课堂中的教学应用

MR混合现实情景实训教学系统在军事演练课堂中的教学应用具有以下优势&#xff1a; 1. 增强现实感&#xff1a;通过MR技术&#xff0c;学生可以在军事演练中更真实地感受到战场环境&#xff0c;增强他们的实战经验。 2. 提高训练效率&#xff1a;通过MR技术&#xff0c;可以模…...

vant checkbox 复选框 样式改写

修改前 修改后 基于 vant&#xff1a; 4.8.3 unocss: 0.53.4 <van-checkbox-group v-model"query.zczb" shape"square" class"text-16 w-100% flex flex-wrap"><template v-for"item in registerCapitalOption"><v…...

物联网实战--入门篇之(一)物联网概述

目录 一、前言 二、知识梳理 三、项目体验 四、项目分解 一、前言 近几年很多学校开设了物联网专业&#xff0c;但是确却地讲&#xff0c;物联网属于一个领域&#xff0c;包含了很多的专业或者说技能树&#xff0c;例如计算机、电子设计、传感器、单片机、网…...

将yolov5s部署到安卓上实战经验总结

最近需要在手机端实现一个目标检测的功能&#xff0c;于是选择了小巧又在目标检测方面表现很好的yolov5s&#xff0c;官网下载yolov5代码&#xff0c;用自己做的数据集进行了训练&#xff0c;然后把模型转换成torchscript格式&#xff0c;这些过程网上都有很多讲解&#xff0c;…...

算法日记————对顶堆(4道题)

对顶堆的作用主要在于动态维护第k大的数字&#xff0c;考虑使用两个优先队列&#xff0c;一个大9999999999根堆一个小根堆&#xff0c;小根堆维护大于等于第k大的数字的数&#xff0c;它的堆顶就是堆内最小&#xff0c;第k大的数字&#xff0c;另外一个大根堆维护小于等于k的数…...

【I.MX6ULL移植】Ubuntu-base根文件系统移植

1.下载Ubuntu16.04根文件系统 http://cdimage.ubuntu.com/ 1 2 3 4 5 2.解压ubuntu base 根文件系统 为了存放 ubuntu base 根文件系统&#xff0c;先在 PC 的 Ubuntu 系统中的 nfs 目录下创建一个名为 ubuntu_rootfs 的目录&#xff0c;命令如下&#xff1a; 【注意&…...

unity3d for web

时光噶然 一晃好多年过去了&#xff08;干了5年的u3d游戏&#xff09;&#xff0c;记得最后一次使用的版本好像是 unity 2017。 那个是 unity3d for webgl 还需要装个插件。用起来很蛋疼。 最近做一个小项目 在选择是用 Layabox 还是 cocosCreate 的时候 我想起了老战友 Uni…...

大宋咨询(深圳问卷调研)关于消费者研究的流程

消费者研究是一项至关重要的任务&#xff0c;它有助于企业了解目标市场的需求、偏好和行为&#xff0c;从而制定更加精准的营销策略。在执行消费者研究时&#xff0c;需要遵循一定的步骤和方法&#xff0c;以确保研究的准确性和有效性。开展消费者研究需要一系列的步骤和方法。…...

STM32看似无法唤醒的一种异常现象分析

1. 引言 STM32 G0 系列产品具有丰富的外设和强大的处理性能以及良好的低功耗特性&#xff0c;被广泛用于各类工业产品中&#xff0c;包括一些需要低功耗需求的应用。 2. 问题描述 用户使用 STM32G0B1 作为汽车多媒体音响控制器的控制芯片&#xff0c;用来作为收音机频道存贮…...

iOS - Runtime-isa详解(位域、union(共用体)、位运算)

文章目录 iOS - Runtime-isa详解&#xff08;位域、union&#xff08;共用体&#xff09;、位运算&#xff09;前言1. 位域介绍1.1 思路1.2 示例 - 结构体1.3 示例 - union&#xff08;共用体&#xff09;1.3.1 说明 1.4 结构体 对比 union&#xff08;共用体&#xff09; 2. a…...

使用VSCode搭建Vue 3开发环境

使用VSCode搭建Vue 3开发环境 Vue 3是一种流行的前端JavaScript框架,它提供了响应式的数据绑定和组合式的API。Visual Studio Code(VSCode)是一个轻量级但功能强大的源代码编辑器,支持多种语言开发。本文将引导您完成使用VSCode搭建Vue 3开发环境的步骤。 1. 下载和安装V…...

深度学习中的模型蒸馏技术:实现流程、作用及实践案例

在深度学习领域&#xff0c;模型压缩与部署是一项重要的研究课题&#xff0c;而模型蒸馏便是其中一种有效的方法。 模型蒸馏&#xff08;Model Distillation&#xff09;最初由Hinton等人在2015年提出&#xff0c;其核心思想是通过知识迁移的方式&#xff0c;将一个复杂的大模型…...

Java服务运行在Linux----维护常用命令

想起来哪些再添加上去 查看Java程序进程 jps -l 查出进程后根据pid 查询程序所在目录 pwdx 31313 根据端口查找PID 根据pid杀死程序 kill -p 31313 查看目录下所有包含9527的文件 grep -rn 9527 查看磁盘空间 查找文件名"nginx"文件或模糊查找"*nginx*&quo…...

夜晚水闸3D可视化:科技魔法点亮水利新纪元

在宁静的夜晚&#xff0c;当城市的霓虹灯逐渐暗淡&#xff0c;你是否曾想过&#xff0c;那些默默守护着城市安全的水闸&#xff0c;在科技的魔力下&#xff0c;正焕发出别样的光彩&#xff1f;今天&#xff0c;就让我们一起走进夜晚水闸3D模型&#xff0c;感受科技为水利带来的…...

从零开始的软件开发实战:互联网医院APP搭建详解

今天&#xff0c;笔者将以“从零开始的软件开发实战&#xff1a;互联网医院APP搭建详解”为主题&#xff0c;深入探讨互联网医院APP的开发过程和关键技术。 第一步&#xff1a;需求分析和规划 互联网医院APP的主要功能包括在线挂号、医生预约、医疗咨询、健康档案管理等。我们…...

【深度学习】YOLO检测器的发展历程

YOLO检测器的发展历程 YOLO&#xff08;You Only Look Once&#xff09;检测器是一种流行的实时对象检测系统&#xff0c;以其速度和准确性而闻名。自2016年首次推出以来&#xff0c;YOLO已经成为计算机视觉领域的一个重要里程碑。在本博客中&#xff0c;我们将探讨YOLO检测器…...

C语言--编译和链接

1.翻译环境 计算机能够执行二进制指令&#xff0c;我们的电脑不会直接执行C语言代码&#xff0c;编译器把代码转换成二进制的指令&#xff1b; 我们在VS上面写下printf("hello world");这行代码的时候&#xff0c;经过翻译环境&#xff0c;生成可执行的exe文件&…...

实现使用C#代码完成wifi的切换和连接功能

实现使用C#代码完成wifi的切换和连接功能 代码如下&#xff1a; namespace Wifi连接器 {public partial class Form1 : Form{private List<Wlan.WlanAvailableNetwork> NetWorkList new List<Wlan.WlanAvailableNetwork>();private WlanClient.WlanInterface Wla…...

Mac添加和关闭开机应用

文章目录 mac添加和关闭开机应用添加开机应用删除/查看 mac添加和关闭开机应用 添加开机应用 删除/查看 打开&#xff1a;系统设置–》通用–》登录项–》查看登录时打开列表 选中打开项目&#xff0c;点击“-”符号...

QT QInputDialog弹出消息框用法

使用QInputDialog类的静态方法来弹出对话框获取用户输入&#xff0c;缺点是不能自定义按钮的文字&#xff0c;默认为OK和Cancel&#xff1a; int main(int argc, char *argv[]) {QApplication a(argc, argv);bool isOK;QString text QInputDialog::getText(NULL, "Input …...

商标设计网格/seo网站推广的主要目的不包括

其他电脑&#xff08;win7/win8&#xff09;都可以远程连接我的电脑&#xff0c;但用了学校图书馆机房的电脑连就有问题&#xff08;xp系统&#xff09;&#xff0c;后来&#xff0c;发现是自己电脑需要多设置一步&#xff1a; 进入远程连接设置&#xff0c;然后去掉勾选下面&…...

wordpress加载动画插/seo建站要求

表空间是oracle数据库中最大的逻辑单位与存储空间单位&#xff0c;数据库系统通过表空间为数据库对象分配空间。表空间在物理上体现为磁盘数据文件&#xff0c;每一个表空间由一个或多个数据文件组成&#xff0c;一个数据文件只可与一个表空间相联系&#xff0c;这是逻辑与物理…...

用vs2012做网站案例/百度下载官方下载安装

今天要做一个小Demo用来获取测试数据的&#xff0c;碰到一个特别基础性的语言基础问题&#xff0c;Mark下来。如果双目运算符号的左右两个数值类型为整型&#xff0c;则得出来的数值也为整型&#xff0c;例如一下一个小Demo&#xff1a;inta 64;intb 65;floatf (float)(b/a);f…...

wordpress登录 小工具/广东省广州市白云区

使用 JSP 设置 cookie 使用 JSP 设置 cookie 包含三个步骤&#xff1a; (1)创建一个 cookie 对象&#xff1a; 调用 cookie 的构造函数&#xff0c;使用一个 cookie 名称和值做参数&#xff0c;它们都是字符串。 Cookie cookie new Cookie("key","value"…...

河南郑州app建设网站/网络推广外包内容

Visual Studio 中预定于修饰层的实际显示优先级。转载于:https://www.cnblogs.com/NanaLich/archive/2013/05/20/3088438.html...

江苏网站建设开发/seo搜索引擎优化求职简历

有哪些基础的问题&#xff1f; 一些简单的问题在前面的文章中都体现了&#xff1a; 为什么要使用消息中间件&#xff1f;消息中间件有哪些缺点&#xff1f;ActiveMQ、RabbitMQ、RocketMQ和kafka都有什么优缺点&#xff1f;RabbitMQ如何保证高可用性&#xff1f;kafka如何保证…...