gpt4 book ai didi

java - ImageJ API : how to get access to a straight line selection object in the java code?

转载 作者:行者123 更新时间:2023-11-29 04:51:39 26 4
gpt4 key购买 nike

我使用 ImageJ 1.x API在我的 Java 应用程序中,我以不可见模式运行 ImageJ:

ImageJ imageJApplication = new ImageJ(2);

在我的 Java 应用程序中,我生成了几个图像并打开它们以供用户交互:

Opener opener = new Opener();  
String imageFilePath = getLastImageFilePath();
ImagePlus imp = opener.openImage(imageFilePath);
imp.show();

我为用户提供了在任何打开的图像上进行直线选择的可能性:

IJ.setTool(4);

如果用户在图像上画了一条直线,那么我需要获取这条线的长度。为此,我尝试访问由用户交互生成的直线选择对象。不幸的是,我不知道 ImageJ 在哪里创建和保存这个对象。

我假设它应该是ij.gui.Line 类(扩展ij.gui.Roi 的类)的对象。我知道要在 java 程序中自己绘制一个 Roi 类型的对象,我会创建一个 ij.gui.Overlay 实例,添加 Roi 对象到叠加层,然后将叠加层设置为我的 ImagePlus 目标实例。所以我试图在我打开的图像的叠加层中寻找直线选择对象:

ImagePlus imp = WindowManager.getCurrentImage();
double lineLength = 0;

Overlay overlay = imp.getOverlay();
if (overlay!=null){
for (int i = 0; i < overlay.size(); i++){
if (overlay.get(i).isLine()){
Line currentImageLine = (Line) overlay.get(i);
lineLength = currentImageLine.getLength();
}
}
}

但对于用户绘制直线的图像,上面代码中的调用 imp.getOverlay() 返回 null。因此,显然,overlay 是寻找用户生成的直线选择对象实例的错误位置。有人知道如何访问直线选择对象吗?

最佳答案

有关 ImageJ API 的问题,通常是 ImageJ forum是最好的询问地点。

Does somebody know how to get access to the straight line selection object?

你走在正确的轨道上,但被 ij.gui.Overlay 类误导了(它可以包含任意数量的 ij.gui.Roi 对象,但是需要显式添加到 ImagePlus)。

要从 ImagePlus 获取当前选择,只需调用 imp.getRoi()(另见 javadoc):

ImagePlus imp = WindowManager.getCurrentImage();
double lineLength = 0;
Roi roi = imp.getRoi();

if (roi != null && roi.isLine()) {
lineLength = roi.getLength();
}

还有一条评论:

ImageJ imageJApplication = new ImageJ(2);
...
IJ.setTool(4);

为了让您的代码更具可读性,请使用定义的常量而不是任意整数:

ImageJ imageJApplication = new ImageJ(ImageJ.NO_SHOW);
...
IJ.setTool(Toolbar.LINE);

关于java - ImageJ API : how to get access to a straight line selection object in the java code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35223438/

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