Tag: 图像处理

在不同视角的图像中找到射箭目标

我正试图找到一种方法来识别射箭目标和照片上的所有环,这些环可能由不同的视角组成: 我的目标是确定目标,然后在箭头击中目标的位置自动计算其得分。 推定如下: 相机的位置不固定,可能会改变 射箭目标也可能会轻微移动或旋转 目标可能具有不同的大小并且具有不同的圆圈数量 目标中可能有许多洞(有时是大划痕) 我已经尝试过使用OpenCV来查找轮廓,但即使使用预处理(灰度 – >模糊( – >阈值) – >边缘检测),我仍然会发现一些houndred轮廓,它们都被箭头或其他障碍物(孔)分散注意力。目标,所以不可能找到一个漂亮的圆形线。 使用霍夫找到圆圈也不起作用,因为它会给我我的结果,因为霍夫只能找到完美的圆而不是椭圆。 通过预处理图像,这是我迄今为止的最佳结果: 我正在考虑椭圆和圆拟合,但由于我不知道目标的半径,位置和姿势,这可能是一个非常麻烦的任务。 另一个想法是关于使用模板识别,但目标的位置和旋转经常变化。 现在我有想法跟随图像上的每一行来检查它是否是一条曲线然后猜测哪些曲线属于一起形成一个圆/椭圆(椭圆因为透视)。 问题是线条可能在短距离内被箭头或孔相交,因此线条太短而无法检查它是否是曲线。 如果目标上的圆圈较小,则根本无法识别它的机会很高。 此外,如您所见,圆圈8,7和6在左侧没有清晰的线条。 我认为只要能够清楚地识别目标中的所有环,就不需要进行透视校正来完成这项任务。 我google了很长时间,发现一些论文都没有完全专注于这个特定的任务,也太过数学让我无法理解。 是否有可能实现这一任务? 你能和我分享一个如何解决这个问题的想法吗? 任何事情都非常感激。 我在Java中这样做,但编程语言是次要的。 如果您需要更多详细信息,请与我们联系。

从Java中的非常大的图像文件中读取区域

是否有一个Java库可以读取非常大的图像(例如JPEG)文件(> 10,000 x 10,000像素)的区域,而不会将整个图像保留在内存中。 或者,哪个Java库能够以最小的开销处理非常大的图像文件。

将BufferedImage转换为另一种类型

从源( File , InputStream , URL )读取图像最方便的方法是: BufferedImage myImage = ImageIO.read( source ); 但是, 如何将myImage转换为BufferedImage.TYPE_USHORT_565_RGB格式?

将图像序列化(与Swing兼容)从Java到Android的最佳方法是什么?

我正在开发一个Android应用程序,这是一个测验。 另一方面,我正在开发一个完全基于Swing的桌面工具。 桌面工具用于插入测验的问题,并生成一个序列化的目标文件,其中包含所有问题。 我使用java.awt.Image来保存附有问题的图像。 不幸的是,当我完成桌面工具的开发并转到Android端时,我发现Android没有java.awt.Image 。 所以我的问题是 ,无论如何在Android应用程序中包含java.awt.Image ? 或者除了支持Swing组件之外,Java和Android中还有另一个可用于处理Image的类吗? 或者至少,有没有办法解决我遇到的问题? 注意:您可能想知道为什么我要序列化对象而不仅仅是从XML或数据库中提取问题。 那是因为,我需要将树数据结构作为问题的类别; 每个类别都有一个子类别旁边的问题列表。

如何使用基于均方误差的基于像素的图像比较度量来比较java中的图像集?

在我的项目中,我有一组图像。 我需要比较它们。 将来自一个图像的每个像素与数据集中所有其他图像中的相同位置处的像素进行比较。 在对图像空间中的所有像素应用均方误差计算之后,识别一组不同的像素,其表示图像中具有变化的颜色值的像素。 我已经比较并存储了两个图像的文件中的相似像素。但是对于12个图像不能这样做。’code’ import java.io.*; import java.awt.*; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; class spe { public static void main(String args[]) throws IOException { long start = System.currentTimeMillis(); int q=0; File file1 = new File(“filename.txt”); /* if file doesnt exists, then create it if (!file.exists()) { file.createNewFile(); }*/ FileWriter fw = new FileWriter(file1.getAbsoluteFile()); BufferedWriter bw […]

在Java中没有内存问题的缩略图加载大图像?

我试图让用户从他们的硬盘加载图像,并在GUI中以视觉forms呈现这些缩略图列表(带有添加到JList的图标的JPanel)。 我目前正在使用ImageIO.read()来获取BufferedImage并为每个图像使用getScaledInstance(听说你不应该使用它)。 它适用于小图像,但加载超过四张照片(5000×3000或其他一些),我得到“java.lang.OutOfMemoryError:Java堆空间”。 不保存对全尺寸BufferedImage的引用,所以我认为垃圾收集器会处理它并且只保留缩放图像(不应该占用太多内存),但它看起来不像。 我也踩了getRuntime()。gc()和System.gc(),没有效果。 从文件加载缩放图像的任何好方法,而不会遇到内存错误? 显然很多软件都设法做到这一点,但也许不是用Java做的。 外部库是可以的。 当前代码: BufferedImage unscaledImage = ImageIO.read(imageFile); int unscaledHeight = unscaledImage.getHeight(); int unscaledWidth = unscaledImage.getWidth(); int imageRatio = unscaledHeight/unscaledWidth; if (imageRatio >= 1) { return new ImageIcon(unscaledImage.getScaledInstance(width,-1,Image.SCALE_FAST)); } else { return new ImageIcon(unscaledImage.getScaledInstance(-1,height,Image.SCALE_FAST)); }

如何在Java中自动裁剪图像白色边框?

在java中从图像中自动裁剪白色边框的最简单方法是什么? 提前致谢…

如何使用openCV或OCR tesseract从图像中提取文本?

可能重复: android OCR? 我目前正在基于Android手机中的图像捕捉进行文本识别项目。 我想问一下如何从图像中提取文本? 是否有任何openCV或OCR tesseract教程用于提取?

FFT图像转换的输入和输出应该是什么?

我尝试使用Java中的FFT Cooley-Tukey算法获得灰度图像的光谱。 我不知道如何形成算法的输入以及输出中用于形成光谱图像的值。 目前我的输入是一个复数数组,其中Re = 8bit灰度域中像素的值,Im = 0; 在运行算法之后,我获得了另一个复数数组,其中实部具有很多值,在[0,255]范围和虚部0之外。我试图从模数为256的实数数组创建一个图像。 这是频谱的外观: 这就是我所拥有的: 显然,我做了一件可怕的错事,但我不知道是什么。

将JPG加载到Swing Apps中

我想我在这里遇到了一些类路径蓝调。 我一直在关注这些例子 。 我阅读了教程 。 但似乎没有什么对我有用。 假设我在以下URI上有一个JPEG: C:\Users\MyUser\someIcon.jpeg 让我们说我有一个具有JPanel的Swing应用程序,我想将这个JPEG添加到JPanel中(定位/布局无关紧要)。 如何做到这一点? 我没有收到任何错误或exception,只是没有看到JPEG加载。 我试图使用的代码是这样的: String someIconUri = “C:\Users\MyUser\someIcon.jpeg”; URL imageUrl = getClass().getResource(someIconUri); ImageIcon imageIcon = new ImageIcon(imageUrl); myPanel.add(imageIcon); 请指教……我今天中午以来一直在处理这个……以及它的午夜。 提前感谢任何正确方向的推动 。