gpt4 book ai didi

java - 如何在 ImageJ 中使用线程打开文件夹? ( java )

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:29 25 4
gpt4 key购买 nike

作为 ImageJ 插件项目的一部分,我需要打开最多 3000 张图像一个图像堆栈。用户选择包含所有文件的文件夹

DirectoryChooser dirChoos = new DirectoryChooser("Select Folder");
String filePath = dirChoos.getDirectory();

我当前打开文件的方法是

FolderOpener opener = new FolderOpener();
ImagePlus imp = opener.openFolder(filePath);
ImageStack stack = imp.getImageStack();

这可行,但是对于较大的文件夹,这会增加插件运行时间 4 或 5 分钟。虽然我知道打开大文件夹显然需要更多时间,但如果我能减少一点时间就好了。

我试图实现的方法是

File folder = new File(filePath);
String[] listOfFiles = Folder.list();
Arrays.sort(listOfFiles); // to make sure the stack is in the right order

通过使用 Arrays.copyOfRange 将其 listOfFiles 拆分(为了论证,分成 3 个)并分成多个部分,并将它们传递给扩展 Thread 的对象

openFolder r1 = new openFolder(listOfFiles_part1);
openFolder r2 = new openFolder(listOfFiles_part2);
openFolder r3 = new openFolder(listOfFiles_part3);

new Thread(r1).start();
new Thread(r2).start();
new Thread(r3).start();

openFolder 的方法使用 listOfFiles_part 从文件中形成 ImagePlus 实例数组

int len = Array.getLength(listOfFiles_part)
ImagePlus[] impArray = new ImagePlus[len];
for (int a = 0; a < len; a++ ) {
impArray[a] = new ImagePlus((listOfFiles_part[a]).getPath());
}

然后,返回 impArray,并由数组形成 ImageStack。

但是,这确实看起来有点迟钝的方法,而且到目前为止我还没有太多的运气来实现。

是否有更好的方法使用线程从文件夹中获取 ImageStack?(使用线程是否一定会加速该过程?)

如有任何帮助,我们将不胜感激。干杯

最佳答案

还有不止一种方法。如果您使用 java 8,并行方法会更简单

List<ImagePlus> impArray = new ArrayList<ImagePlus>();
listOfFiles_part.parallelStream()
.forEachOrdered(i -> impArray.add(new ImagePlus(i.getPath()));

否则您可能会使用线程池,因为您不知道取决于硬件的优化线程数。

关于java - 如何在 ImageJ 中使用线程打开文件夹? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31224259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com