什么是最好的 java 图像处理库/方法? [关闭]

Posted

技术标签:

【中文标题】什么是最好的 java 图像处理库/方法? [关闭]【英文标题】:What is the best java image processing library/approach? [closed] 【发布时间】:2010-10-10 20:05:51 【问题描述】:

我同时使用 JAI 媒体 API 和 ImageMagick?

ImageMagick 存在一些可扩展性问题,基于 JNI 的 JMagick 也没有吸引力。 与 ImageMagick 相比,JAI 在调整大小操作时的质量较差。

有谁知道任何优秀的工具,无论是开源的还是商业的,都是原生 java 并提供高质量的结果?

【问题讨论】:

JMagick 几乎没有文档,除了 javadocs。我刚刚花了两个小时寻找应该很容易做到的事情。 确实如此。我选择退出进程并使用 ImageMagick 使用 apache exec 作为管理进程的一种方式。这工作得很好。我可能已经为此目的构建了一个图像服务器。很难找到具有 ImageMagick 质量和功能的东西。 像这样的问题被关闭为题外话是荒谬的。超过 100000 次观看,这显然是人们在问的问题。有时人们并不确切地知道他们将要做什么,并且会欣赏其他人对最佳总体框架的“自以为是”的回应。太夸张了! 如果人们讨论 Java 编程的一个关键方面的利弊,会有什么问题?这不是应该做的吗?恕我直言,此类问题应仔细审核和维护,以便为重新开始特定主题的开发人员提供良好的参考。 是的。在 Google 中以 java image processing library 获得最高结果,但已关闭……像往常一样。这些天来,审核过度了。 【参考方案1】:

Processing 是新的,但非常非常好。

【讨论】:

我知道处理,但是人们真的在使用它吗,我想在我的 X jpeg 的时尚库上运行 X 转换? 我用过,感觉真的很强大,值得下注 实际上核心库(可用于嵌入功能)是 LGPL。但是没有人问许可证是什么。 wiki.processing.org/w/…【参考方案2】:

对于商业工具,您可能想尝试 Snowbound。

http://www.snowbound.com/

我对他们的体验有些过时,但我发现他们的 Java Imaging API 比 JAI 更易于使用且速度更快。

他们的客户支持和代码示例也非常好。

【讨论】:

【参考方案3】:

有ImageJ,号称是

世界上最快的纯Java镜像 处理程序

它可以用作另一个应用程序中的库。它的架构并不出色,但可以完成基本的图像处理任务。

【讨论】:

我在许多图像处理应用程序中使用 ImageJ 作为库。这是一个非常不错的 Java 库。它也很好地与 Java2D 集成,因此您可以很容易地混合和匹配两者。 在我使用 ImageJ 的时候,它的 API 非常笨拙。它更像是一个应用程序,您可以为其编写插件而不是库。据我记得,尝试在旧的 AWT 代码库中开发新的 GUI 是一件很痛苦的事情。 我只是浪费了半天时间来尝试做一个简单的图像旋转、缩放和裁剪。现在是 2019 年,ImageJ 的文档不可用。【参考方案4】:

我不是 Java 人,但 OpenCV 非常适合我的需求。不确定它是否适合你的。这是一个Java端口,我认为: http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_java/java_dev_intro.html

【讨论】:

【参考方案5】:

RoboRealm 视觉软件 list 在许多其他非 Java 库中提到了 JHLabs 和 NeatVision。

【讨论】:

【参考方案6】:

另一个不错的选择:Marvin

【讨论】:

非常感谢。你救了我的一天! :D (PS:我不是 OP。我在谷歌搜索时发现了这篇文章并相信我,它对我帮助很大!(如果有一天我见到你,我会给你买啤酒。))。 @missingfaktor 现在我欠你一杯啤酒。你对约瑟夫的赞美也拯救了我的一天。约瑟夫,你也喝啤酒了 :)! 该 URL 显然不再存在,但 marvinproject.sourceforge.net 似乎是新 URL。 好的,我有义务看一下这个。 =) 看起来很不错,会试一试。【参考方案7】:

http://im4java.sourceforge.net/ - 如果您正在运行 linux,则分叉一个新进程并不昂贵。

【讨论】:

请注意内存不足错误... 分叉很昂贵。它可以使用大量内存。在coderanch.com/t/419196/java/java/there-any-way-execute-Linux底部的一篇文章中查看此人的引用(文章为:developers.sun.com/solaris/articles/subprocess/subprocess.html) @Plaudit checkout gm4java,它以交互模式创建一个GM进程池,不需要每次都fork来转换图像。 kennethxu.blogspot.com/2013/04/…【参考方案8】:

imo 最好的方法是使用GraphicsMagick Image Processing System 和im4java 作为Java 的命令行接口。

GraphicsMagick 有很多优点,但只有一个优点:

GM 用于处理数十亿 世界上最大的照片文件 网站(例如 Flickr 和 Etsy)。

【讨论】:

它只是一个命令行包装器——不是一个库......【参考方案9】:

我知道这个问题已经很老了,但是随着新软件的问世,它确实有助于获得一些人们可能感兴趣的项目的新链接。

imgscalr 是纯 Java 图像大小调整(以及简单的操作,如填充、裁剪、旋转、变亮/变暗等)库,使用起来非常简单——一个类由一组简单的图形操作组成定义为传递图像并返回结果的 静态 方法。

使用该库的最基本示例如下所示:

BufferedImage thumbnail = Scalr.resize(image, 150);

使用一些质量调整等生成图像缩略图的更典型用法可能如下所示:

import static org.imgscalr.Scalr.*;

public static BufferedImage createThumbnail(BufferedImage img) 
    // Create quickly, then smooth and brighten it.
    img = resize(img, Method.SPEED, 125, OP_ANTIALIAS, OP_BRIGHTER);

    // Let's add a little border before we return result.
    return pad(img, 4);

所有图像处理操作都使用原始 Java2D 管道(在主要平台上是硬件加速的),不会像代码中的库争用那样引入通过 JNI 调用的痛苦。

imgscalr 也已部署在很多地方的大规模生产中 - 包含 AsyncScalr 类使其成为任何服务器端图像处理的完美插件。

您可以对图像质量进行大量调整,以在速度和质量之间进行权衡,最高 ULTRA_QUALITY 模式可提供看起来比 GIMP 的 Lancoz3 实现更好的缩放结果。

【讨论】:

@Riyad Kalla 看起来很有趣,谢谢...但我不明白它可以用于商业项目吗? @user592704 当然,imgscalr 是在 Apache 2 许可下获得许可的; Apache 基金会的所有内容都使用相同的许可证。您可以在开源或商业产品中使用它并做您想做的事情。 imgscalr 实际上已经部署在许多生产中的商业网络应用程序中。 @DavidParks 你是对的,imgscalr 的目的是在你拥有 BufferedImage 实例(解码的图像数据)后接管,而不是之前。我什至不想考虑走上尝试自己的解码器/编码器的道路,因为这些管道早已在 Java2D 团队的掩护下进行了硬件加速——试图重做所有工作,没有错误且高效将是一项艰巨的任务。 @g*** imgscalr 对原始 BufferedImage 实例(解码的图像数据)进行操作——因此其他东西(通常是 ImageIO 库)需要将编码的图像数据解码为 BufferedImage,然后将其重新编码为完成对 imgscalr 的操作后的新图像 - 换句话说“imgscalr 不关心文件格式,您在将图像交给 imgscalr 之前已经对其进行了解码” ImgScalr 仅适用于基本的图像处理。如果涉及图像加载和处理。它缺乏复杂性。【参考方案10】:

尝试使用Catalano Framework。

关键点:

类似于 AForge.NET/Accord.NET 的架构。 在两个环境中使用相同的代码、桌面和 android 运行。 包含多个并行过滤器。 开发如火如荼。

Catalano 框架是用于 Java 和 Android 的科学计算框架。该项目最初是作为 .NET 的 AForge.NET 和 Accord.NET 框架的许多功能的初始端口,但随着现在这些项目之间共享的更多高级功能而稳步发展。

例子:

FastBitmap fb = new FastBitmap(bitmap);

Grayscale g = new Grayscale();
g.applyInPlace(fb);

Threshold t = new Threshold(120);
t.applyInPlace(fb);

bitmap = fb.toBitmap();

//Show the result

【讨论】:

The best framework in Java is Catalano Framework 这听起来像是在宣传自己的产品。您的框架可能很棒,但您应该披露您与它的从属关系,如 FAQs 中所述。 @MatthiasBraun 好的,我同意你的观点,我不知道。我编辑了答案。 Catalano 框架已移至 github.com/DiegoCatalano/Catalano-Framework【参考方案11】:

我不能说它是“最好的”库,但我认为你可以试试这个: http://algart.net/java/AlgART/ 它是一个开源 Java 库,支持具有不同类型(从 1 位到 64 位浮点)元素的通用“智能”数组和矩阵,包括 2D、3D 和多维图像处理和其他算法,与数组和矩阵。 不幸的是,现在它包含的演示和示例不够多,但另一方面,它包含很多 JavaDocs。几年来,它一直处于商业软件 (SIMAGIS) 的基础,但现在它是开源的。

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 你说得对,我已经编辑了第一条评论。

以上是关于什么是最好的 java 图像处理库/方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

什么是最好的 OAuth2 C# 库? [关闭]

什么是最好的(便携式)跨平台任意精度数学库? [关闭]

用于创建图形的 Java 库 [关闭]

是否有可行的手写识别库/程序? [关闭]

是否有可行的手写识别库/程序? [关闭]

最高效的 Java 原始集合库 [关闭]