gpt4 book ai didi

java - 在 ImageJ 中使用 ImageProcessor

转载 作者:行者123 更新时间:2023-12-01 14:17:45 26 4
gpt4 key购买 nike

我是 java 和 imageJ 新手。我已经加载了一张图像并获得了一个 ImageProcessor,我将其称为 imgproc。我在图像中找到了围绕特征的边界/框。外面只是背景。我还找到了该区域的像素矩阵。现在我尝试只处理图像中的这个区域。要使用以前的现有代码(方法)来做到这一点,我的输入参数应该是 ImageProcessor。所以,我最初的想法是使用duplicate()方法来复制imgproc。并使用 resize 方法将其缩小到我之前找到的框的大小。但这不起作用,因为我用显示图像方法进行了测试,我必须显示它。我得到的只是一张缩小的黑色图片。这个最初的想法被编码在这里:

ImageProcessor Whiteimproc=imgproc.duplicate();
ImageProcessor BWhiteimproc=Whiteimproc.resize(BWhiteMatrix.length,BWhiteMatrix[0].length);
BWhiteimproc.setIntArray(BWhiteMatrix);
//the next three lines are going to show the image
Image ImagetoShow=BWhiteimproc.createImage();
Img ShowImg= new Img();
ShowImg.imgFrame(ImagetoShow,"BWhite");`

然后我尝试使用 ImagePlus 并创建一个新的 ImageProcessor。它起作用了。如下图:

ImagePlus imgWhite=IJ.createImage("white","jpg",BWhiteMatrix.length,BWhiteMatrix[0].length,1);
ImageProcessor BWhiteimproc=imgWhite.getProcessor();
BWhiteimproc.setIntArray(BWhiteMatrix);
//the next three lines are going to show the image
Image ImagetoShow=BWhiteimproc.createImage();
Img ShowImg= new Img();
ShowImg.imgFrame(ImagetoShow,"BWhite");

谁能帮我解释一下这是为什么吗?而且我确实知道为什么我不能使用 ImageProcessor 来定义 ImageProcessor 类的新对象。

谢谢

最佳答案

我不确定,但第一种方法可能不起作用,因为 ImageProcessor 的类型与第二种方法中的类型不同。尝试使用 BWhiteimproc.getClass().getName() 检查 ImageProcessors 的运行时类型.

ImageProcessor#setIntArray(int[][])对不同类型的图像执行不同的操作。对于 32 位图像,它调用 Float.intBitsToFloat(int)因此,如果 int 值为 100,则保存的 float 值将为 +0e100(float 的最后 8 位是指数),即零。对于 8 位和 16 位图像,它将 int 转换为不太精确的类型(字节和短整型)。

And I do know why I could not use ImageProcessor to define an new object of ImageProcessor Class.

ImageProcessor 是一个抽象类。您无法创建抽象类的实例。请改用其中一个子类:

  • 用于 8 位灰度图像的字节处理器
  • 用于 16 位灰度图像的 ShortProcessor
  • 用于 32 位浮点灰度图像的 FloatProcessor
  • RGB 图像的 ColorProcessor

关于java - 在 ImageJ 中使用 ImageProcessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17956054/

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