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

news2024/12/28 5:57:32

文章目录

    • 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

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

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

相关文章

CI/CD实战-jenkins结合docker 5

实验准备&#xff1a; 在docker主机要下载git工具 禁掉key的校验 确保在立即构建项目时不会出现任何报错&#xff1a; 自动化构建docker镜像 在server3上安装docker-ce 修改内核参数 拷贝证书 添加默认仓库 添加harbor仓库的解析 测试拉取 登录harbor私有仓库 在jenkins安装d…

WPF使用外部字体,思源黑体,为例子

1.在工程中新建文件夹&#xff0c;命名为“Font"。 2.将下载好的字体文件复制到Font文件夹。 3.在工程中&#xff0c;加入静态资源 <Window.Resources><FontFamily x:Key"SYBold">/AnalyzeImage;Component/Font/#思源黑体 CN Bold</FontFamily…

k8s的单pod单ip网络模型

背景 在k8s中&#xff0c;不再是每个docker容器一个ip地址&#xff0c;而是每个pod一个ip地址&#xff0c;docker容器只是pod里面的其中一个进程&#xff0c;可能拥有对外的端口号&#xff0c;但是不在为docker容器单独分配ip地址&#xff0c;pod里面的容器共享pod的ip地址 单…

解決flask-restful提示Did not attempt to load JSON data 问题

在使用flask-restfull进行API开发的时候。一旦我使用类似下面的代码从url或者form中获得参数就会出现报错&#xff1a;Did not attempt to load JSON data because the request Content-Type was not ‘application/json’。 代码如下&#xff1a; # Flask_RESTFUl数据解析 f…

2024-03-25 作业

作业要求&#xff1a; 整理思维导图定义自己的命名空间&#xff0c;其中有string类型的变量&#xff0c;再定义两个函数&#xff0c;一个函数完成字符串的输入&#xff0c;一个函数完成求字符串长度&#xff0c;再定义一个全局函数完成对该字符串的反转有以下定义&#xff0c;说…

ESCTF-Web赛题WP

0x01-初次见面-怦然心动:your name? 随便输入一个字 根据提示可以看到 我们需要看源代码 直接 搜索 secret 关键字或者 ESCTF flag ESCTF{K1t0_iS_S0_HAPPy} 0x02-小k的请求 更安全的传参 post 参数为ESCTF 值为 love 自己的ip 同时还有个要求 是需要从度娘转过来 https://www…

辅助功能IOU(交并比)_3.2

实现两个目标框的交并比候选框在多目标跟踪中的表达方式及相应转换方法 IOU(Intersection over Union)&#xff0c;“交并比”&#xff0c;是计算机视觉和图像处理中常用的一个评价指标&#xff0c;尤其在目标检测任务中用来衡量模型预测的目标框与真实目标框的重合程度。 具体…

每日一练:LeeCode-200、岛屿数量【DFS递归+BFS队列】

给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网格的四条边…

以XX大学校园为例的智慧能源管理系统建设方案【能源物联网+智能微电网数字校园、节能校园、低碳校园】

建设背景 贯彻落实《中共中央 国务院关于完整准确全面贯彻新发展理念做好碳达峰碳中和工作的意见》和《国务院关于印发2030年前碳达峰行动方案的通知》要求&#xff0c;把绿色低碳发展纳入国民教育体系。 2021年3月26日为推动信息技术与教育教学深度融合&#xff0c;教育部印…

Qt 计算两条直线QLineF的重叠部分,如何存在则返回该直线

计算两条直线QLineF的重叠部分 效果 使用示例 QLineF intersection;bool isSuccess getOverlapSegment(line1, line2, intersection);源码 bool getOverlapSegment(const QLineF& line1, const QLineF& line2, QLineF& overlap) {qreal slope1 (line1.p2().y()…

鸿蒙hdc使用指导

简介 hdc&#xff08;HarmonyOS Device Connector&#xff09;是HarmonyOS为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在windows/linux/mac系统上与真实设备或者模拟器进行交互。 环境准备 hdc工具通过HarmonyOS SDK获取&#xff0c;存放于SDK的toolch…

网络七层模型之传输层:理解网络通信的架构(四)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

好莱坞新风潮:OpenAI携手Sora AI视频生成工具探索电影制作新境界

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

后端常问面经之并发

volatile 关键字 volatile关键字是如何保证内存可见性的&#xff1f;底层是怎么实现的&#xff1f; "观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现&#xff0c;加入volatile关键字时&#xff0c;会多出一个lock前缀指令”lock前缀指令实际上相…

阿里云轻量应用服务器优惠价格2核4G和2核2G报价

阿里云轻量应用服务器2核2G和2核4G配置优惠价格表&#xff0c;轻量2核2G3M带宽61元一年&#xff0c;轻量2核4G4M带宽165元1年&#xff0c;均不限制月流量&#xff0c;阿里云活动链接 aliyunfuwuqi.com/go/aliyun 活动打开如下图&#xff1a; 阿里云轻量应用服务器价格 61元/年…

生物信息学 GO、KEGG

文章目录 北大基因本体论分子通路KEGGGO注释分子通路鉴定 关于同源 相似性 b站链接&#xff1a;北大课程 概述了当前生物信息学领域中几个重要的概念和工具&#xff0c;介绍基因本体论&#xff08;Gene Ontology, GO&#xff09;、分子通路知识库KEGG&#xff08;Kyoto Encyclo…

测试环境搭建整套大数据系统(十二:挂载磁盘到hadoop环境)

一&#xff1a;链接硬盘 将硬盘连接到计算机的 SATA 接口或 USB 接口&#xff0c;并确保硬盘通电并处于可用状态。 二&#xff1a;查看硬盘信息 sudo fdisk -l三&#xff1a;创建分区 gdisk /dev/vbd重新扫描磁盘 partprobe /dev/vdb格式化磁盘 mkfs.ext4 /dev/vdb2查看磁…

Maven高级(工程分模块开发,聚合于继承,版本锁定,Mavne私服的搭建和发布)【详解】

目录 一、Maven复习 1. Maven基本概念 1 Maven的作用 2 Maven的仓库 3 坐标的概念 2. Maven安装配置 3. Maven构建项目 4. Maven依赖管理 5. Maven依赖传递 二、工程分模块开发 1. 分模块开发介绍 2. 工程分模块示例 (1) 创建父工程 (2) 创建pojo模块步骤 (3) 创…

小程序从入门到入坑:事件系统

前言 哈喽大家好&#xff0c;我是 SuperYing&#xff0c;本文是小程序从入门到入坑系列的第 3 篇&#xff0c;将比较详尽的讲解 小程序事件系统 的相关知识点&#xff0c;欢迎小伙伴阅读。 读完本文您将收获&#xff1a; 了解小程序事件及基础使用。了解小程序事件分类及多种的…

vscode添加gitee

1.创建仓库 2.Git 全局设置 3.初始化仓库 2.1 打开vscode打开需要上传到给git的代码文件 2.2.点击左边菜单第三个的源代码管理->初始化仓库 4.点击加号暂存所有更改 5.添加远程仓库 5.1 添加地址&#xff0c;回车 5.2 填写库名&#xff0c;回车 6.提交和推送 6.1 点击✔提交…