Hallo.
Ich hab hier nen kleines Programm geschrieben. Mit diesem möchte ich gerne ein Bild einlesen und nach einem Fingerabdruckähnlichen gebilde suche.
Es gibt erst ne Methode , die das ganze Quadrat nur danach abscannt ob irgendwo nen Pixel ist, der farblich ist. Ich hatte mir gedacht erstmal klein anzufangen und nen schwarzweibild/schwarzes Bild zu nehmen und da nen roten Klekcs drauf zu machen. Dann wenn ein Pixel gefudnen wurde, check er mit der zweiten Methode ob das auch wirklich estwas Kreisartiges ist.Ist natürlich vorerst ein Ansatz und nach in der "Entwicklungsphase".
Aber ich würde erstens gerne...
....eure Meinung dazu hören, und ob der Ansatz an sich richtig ist?Produktive Kritik nehme ich gerne an.
....ob das Laufzeittechnisch sinnvol ist. Ich könntr mir vorstellen, dass das checken eines größeren Bildes irre lange dauert.
....ob jemand ne Idee hat warum ich ne ArrayOutOfBounds bekomme. Hier mal die Fehlermeldung:
Hoffe ihr könnt damit was anfangen
LG Kampfzwereg
Ich hab hier nen kleines Programm geschrieben. Mit diesem möchte ich gerne ein Bild einlesen und nach einem Fingerabdruckähnlichen gebilde suche.
Es gibt erst ne Methode , die das ganze Quadrat nur danach abscannt ob irgendwo nen Pixel ist, der farblich ist. Ich hatte mir gedacht erstmal klein anzufangen und nen schwarzweibild/schwarzes Bild zu nehmen und da nen roten Klekcs drauf zu machen. Dann wenn ein Pixel gefudnen wurde, check er mit der zweiten Methode ob das auch wirklich estwas Kreisartiges ist.Ist natürlich vorerst ein Ansatz und nach in der "Entwicklungsphase".
Aber ich würde erstens gerne...
....eure Meinung dazu hören, und ob der Ansatz an sich richtig ist?Produktive Kritik nehme ich gerne an.
....ob das Laufzeittechnisch sinnvol ist. Ich könntr mir vorstellen, dass das checken eines größeren Bildes irre lange dauert.
....ob jemand ne Idee hat warum ich ne ArrayOutOfBounds bekomme. Hier mal die Fehlermeldung:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
at sun.awt.image.ByteInterleavedRaster.getDataElements(ByteInterleavedRaster.java:318)
at java.awt.image.BufferedImage.getRGB(BufferedImage.java:888)
at QuadratEinlesen.checkQ(QuadratEinlesen.java:128)
at QuadratEinlesen.checkAll(QuadratEinlesen.java:84)
at QuadratEinlesen.checkQ(QuadratEinlesen.java:155)
at QuadratEinlesen.checkAll(QuadratEinlesen.java:84)
at QuadratEinlesen.jBanalysieren_ActionPerformed(QuadratEinlesen.java:177)
at QuadratEinlesen$1.actionPerformed(QuadratEinlesen.java:46)
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:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
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:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
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:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
/**
*
* Beschreibung
*
* @version 1.0 vom 1/10/2012
* @author
*/
public class QuadratEinlesen extends JFrame {
// Anfang Attribute
private JButton jBanalysieren = new JButton();
private JLabel jLmoeglich = new JLabel();
private JLabel jLgefunden = new JLabel();
private JLabel jLcheckPos = new JLabel();
// Ende Attribute
public QuadratEinlesen(String title) {
// Frame-Initialisierung
super(title);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 300;
int frameHeight = 300;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten
jBanalysieren.setBounds(8, 224, 273, 33);
jBanalysieren.setText("Analysieren");
jBanalysieren.setMargin(new Insets(2, 2, 2, 2));
jBanalysieren.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jBanalysieren_ActionPerformed(evt);
}
});
cp.add(jBanalysieren);
jLmoeglich.setBounds(8, 80, 209, 16);
jLmoeglich.setText("Mögliches Quadrat gefunden");
jLmoeglich.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
cp.add(jLmoeglich);
jLgefunden.setBounds(8, 120, 136, 16);
jLgefunden.setText("Abdruck gefunden");
jLgefunden.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
cp.add(jLgefunden);
jLcheckPos.setBounds(8, 160, 123, 16);
jLcheckPos.setText("Checke Position");
jLcheckPos.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
cp.add(jLcheckPos);
// Ende Komponenten
setResizable(false);
setVisible(true);
}
// Anfang Methoden
public void checkAll(int pX, int pY)
{
try
{
BufferedImage image = ImageIO.read(new File("img/abdruck.jpg"));
for (int x = pX; x < image.getWidth(); x++)
{
for (int y = pY; y < image.getHeight(); y++)
{
Color color = new Color(image.getRGB(x, y));
if(color.getBlue()>0 && color.getBlue()<255 &&
color.getRed()>0 && color.getRed()<255 &&
color.getGreen()>0 && color.getGreen()<255)
{
this.checkQ(x,y);
}
}
}
}
catch(IOException e)
{
System.out.println("ERROR");
}
}
public Quadrat checkQ(int x, int y)
{
try
{
int zaehler=0;
int botY = y;
BufferedImage image = ImageIO.read(new File("img/abdruck.jpg"));
Color color;
Color color2;
Color color3;
do
{
botY++;
color= new Color(image.getRGB(x, botY));
}while(color.getRed()>0 && color.getRed()<255 &&
color.getGreen()>0 && color.getGreen()<255 &&
color.getBlue()>0 && color.getBlue()<255 );
int mid = botY-y;
int rX = mid;
int lX = mid;
do
{
rX++;
color2 = new Color(image.getRGB(rX, mid));
}while(color2.getRed()>0 && color2.getRed()<255 &&
color2.getGreen()>0 && color2.getGreen()<255 &&
color2.getBlue()>0 && color2.getBlue()<255);
do
{
lX--;
color3 = new Color(image.getRGB(lX, mid));
}while(color3.getRed()>0 && color3.getRed()<255 &&
color3.getGreen()>0 && color3.getGreen()<255 &&
color3.getBlue()>0 && color3.getBlue()<255 );
for (int a =lX ; a <= rX ; a++)
{
for (int b = y ; b <= botY; b++)
{
Color color4 = new Color(image.getRGB(a, b));
if(color4.getRed()>0 && color4.getRed()<255 &&
color4.getGreen()>0 && color4.getGreen()<255 &&
color4.getBlue()>0 && color4.getBlue()<255 )
{
zaehler++;
}
}
}
if(zaehler>= (((rX-lX)*(botY-y))*0.8))
{
return new Quadrat(new Koordinate(lX,botY), new Koordinate(lX,y), new Koordinate(rX,y), new Koordinate(rX,botY));
}
else
{
this.checkAll(rX, botY);
return null;
}
}
catch(IOException e)
{
System.out.println("ERROR");
}
return null;
}
public void ermittlePos()
{
}
public void jBanalysieren_ActionPerformed(ActionEvent evt)
{
checkAll(0,0);
}
// Ende Methoden
public static void main(String[] args) {
new QuadratEinlesen("QuadratEinlesen");
}
}
Java:
public class Quadrat {
// Anfang Attribute
private Koordinate punktA;
private Koordinate punktB;
private Koordinate punktC;
private Koordinate punktD;
// Ende Attribute
public Quadrat(Koordinate a, Koordinate b, Koordinate c, Koordinate d)
{
this.punktA=a;
this.punktB=b;
this.punktC=c;
this.punktD=d;
}
// Anfang Methoden
public Koordinate getPunktA() {
return punktA;
}
public Koordinate getPunktB() {
return punktB;
}
public Koordinate getPunktC() {
return punktC;
}
public Koordinate getPunktD() {
return punktD;
}
// Ende Methoden
}
Java:
public class Koordinate {
// Anfang Attribute
private int xWert;
private int yWert;
// Ende Attribute
public Koordinate(int x, int y)
{
this.xWert=x;
this.yWert=y;
}
// Anfang Methoden
public int getXWert() {
return xWert;
}
public int getYWert() {
return yWert;
}
// Ende Methoden
}
Hoffe ihr könnt damit was anfangen
LG Kampfzwereg