Java 使用ImageJ以编程方式查找边

Java 使用ImageJ以编程方式查找边,java,edge-detection,imagej,Java,Edge Detection,Imagej,我想使用ImageJ的find edges选项,找到边数组,并以编程方式将其保存到另一个文件中 ImagePlus ip1 = IJ.openImage("myimage.jpg"); ImageProcessor ip = new ColorProcessor(ip1.getWidth(), ip1.getHeight()); ip.findEdges(); 但是,函数findEdges是抽象的,我无法找到边缘图像 编辑: 我写了以下几行: ip.findEdges(); BufferedI

我想使用ImageJ的find edges选项,找到边数组,并以编程方式将其保存到另一个文件中

ImagePlus ip1 = IJ.openImage("myimage.jpg");
ImageProcessor ip = new ColorProcessor(ip1.getWidth(), ip1.getHeight());
ip.findEdges();
但是,函数findEdges是抽象的,我无法找到边缘图像

编辑:

我写了以下几行:

ip.findEdges();
BufferedImage bimg = ip.getBufferedImage();

但是,当我尝试打印BuffereImage的RGB值时,它只为每个像素RGB打印“-16777216”。

ImageProcessor是一个抽象类,它让派生类提供适当的实现。您需要将
ip
声明为类型
ColorProcessor

ColorProcessor ip = new ColorProcessor(ip1.getWidth(), ip1.getHeight()); 
ip.findEdges();

好的,我得到了解决方案,问题是我没有连接彩色处理器和图像

ColorProcessor ip = new ColorProcessor(ImageIO.read(new File("my_image.jpg")));
ip.findEdges();
BufferedImage bimg = ip.getBufferedImage();

我如何到达edge found阵列?我还用ColorProcessor初始化了它,我想它会先在vtable中查看ColorProcessor的函数。我不是ImageJ专家,但看看它似乎没有办法做到这一点。相反,
findEdges()
将转换应用于图像,这样当您获得图像时(例如,通过
createImage()
),您将看到检测到的边缘,而不是原始图像。非常感谢您的努力,但我找到了解决方案。如果您感兴趣,请在下面发布。如果您这样做,您可以像您在问题中所做的那样将
ip
声明为
ImageProcessor
。初始化的左侧在这里并不重要,因为它只是对内存块的引用。右边是实际的类,操作将首先被查找,所以您所说的是正确的。另请参阅此相关的。