I am new to openimaj and i cannot find any tutorials with detailed informations about it. I only found the tutorial-pdf from openimaj.org. So i tried myself starting with contours. But the SuzukiContourProcessor does not work for me. Here's my code:
try {
File f = new File("contours_i.bmp");
System.out.println(f.getAbsolutePath());
FImage image = ImageUtilities.readF(f);
BufferedImage bi = ImageUtilities.createBufferedImage(image);
jPanel1.getGraphics().drawImage(bi, 0, 0, null);
Border contours = SuzukiContourProcessor.findContours(image);
final MBFImage imgC = new MBFImage(640, 480, ColourSpace.RGB);
ContourRenderer.drawContours(imgC, contours);
DisplayUtilities.display(imgC);
} catch (IOException ex) {
Logger.getLogger(ContoursTest.class.getName()).log(Level.SEVERE, null, ex);
}
here are the used images: the lower 'hole' is not recognised: https://i.stack.imgur.com/4NUGQ.png
crashes with NullPointerException in SuzukiContourProcessor: https://i.stack.imgur.com/IEM15.png
Here is the stacktrace with the second image used:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.openimaj.image.contour.SuzukiContourProcessor.findContours(SuzukiContourProcessor.java:223)
at org.openimaj.image.contour.SuzukiContourProcessor.findContours(SuzukiContourProcessor.java:185)
at sudoku.ContoursTest.jButton1ActionPerformed(ContoursTest.java:86)
at sudoku.ContoursTest.access$000(ContoursTest.java:18)
at sudoku.ContoursTest$1.actionPerformed(ContoursTest.java:47)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
The problem seems to be that
borderMap.get(lnbd[0])
returns null and
switch (borderPrime.type) {...
throws the NullPointerException. Maybe i am doing something wrong.
Thx for any help.
chris.
As you have noted the contour detection works as expected when the image is thresholded. That being said it definitely should not crash when given a grey scale image! I'll discuss with the other developers and see what a more appropriate behaviour should be :)