Hi,
ich habe folgendes Projekt:
eine Webcam ist über einer Arbeitsfläche eines Roboters aufgebaut und macht ein Bild(von der Fläche). Nun wird dies gespeichert und soll schließlich ausgewertet werden. Bisher wird einfach nach einem gelben Pixel im Bild gesucht und dieser dann an ein anderes Unterprogramm weitergegeben, welches dann den Roboter so steuert, dass er dort zugreifen kann.
Da die Webcam aber nicht 100%-ig fest montiert ist, kann sie etwas wackeln. dadurch ändern sich natürlich auch die Koordinaten etc..
Ist es möglich quasi im Bild 4 "Trackpunkte" am Rande der Arbeitfläche festzulegen(die zum Beispiel grün sind und dadurch erkannt werden können) und dann ein Viereck aus diesen zu bilden?
Wenn ja, dann könnte man nämlich die Erkennung nur innerhalb des Vierecks aktivieren, oder?
Und wenn das geht, dann wie?
Hier mal mein bisheriges Programm, welches einfach den gelben Punkt sucht (das klapp super!):
Leider kann ich euch das Bild der Webcam nicht zeigen, weil man hier keine Grafiken einfügen kann (nur über URL).
Hier nochmal die Frage: Wie kann man
1) zwischen 4 (zum Beispiel grünen) Punkten ein Viereck bilden?
2) dann nur zwischen den Pixelwerten in diesem Viereck den gelben Punkt suchen?
Vielen Dank im Vorraus
manu
ich habe folgendes Projekt:
eine Webcam ist über einer Arbeitsfläche eines Roboters aufgebaut und macht ein Bild(von der Fläche). Nun wird dies gespeichert und soll schließlich ausgewertet werden. Bisher wird einfach nach einem gelben Pixel im Bild gesucht und dieser dann an ein anderes Unterprogramm weitergegeben, welches dann den Roboter so steuert, dass er dort zugreifen kann.
Da die Webcam aber nicht 100%-ig fest montiert ist, kann sie etwas wackeln. dadurch ändern sich natürlich auch die Koordinaten etc..
Ist es möglich quasi im Bild 4 "Trackpunkte" am Rande der Arbeitfläche festzulegen(die zum Beispiel grün sind und dadurch erkannt werden können) und dann ein Viereck aus diesen zu bilden?
Wenn ja, dann könnte man nämlich die Erkennung nur innerhalb des Vierecks aktivieren, oder?
Und wenn das geht, dann wie?
Hier mal mein bisheriges Programm, welches einfach den gelben Punkt sucht (das klapp super!):
Java:
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ImagePixelReader {
int x = 0;
int y = 0;
public ImagePixelReader() throws Exception {
System.out.println("Klasse ImagePixelReader gestartet");
System.out.println("Einlesen des Bildes...");
BufferedImage img = ImageIO.read(new File("c:/a.jpg")); /**Das Webcambild wird geladen */
for (int x = 0, maxX = img.getWidth(); x < maxX; x++) { /** Die rgb-Werte aller Pixel werden ausgelesen */
for (int y = 0, maxY = img.getHeight(); y < maxY; y++) {
int rgb = img.getRGB(x, y);
Color c = new Color(rgb);
if(c.getRed()>200 && c.getRed()<=255 && c.getGreen()>100 && c.getGreen()<=255 && c.getBlue()>=0 && c.getBlue()<=70){
System.out.println("Red: " + c.getRed());
System.out.println("Green: " + c.getGreen());
System.out.println("Blue: " + c.getBlue());
Roboterpositionierung robpos = new Roboterpositionierung();
robpos.main(x,y);
}
}}
boolean success = (new File("c:/a.jpg")).delete(); /**File a.jpg wird gelöscht */
if (!success) {
System.out.println("Deletion of a.jpg failed!");
}
try {
Roboterpositionierung rp = new Roboterpositionierung ();} /** nächste Klasse wird geladen */
catch(Exception e){
System.out.println("Klasse Roboterpositionierung konnte nicht geladen werden!!!");}
}
}
/** ENDE */
Hier nochmal die Frage: Wie kann man
1) zwischen 4 (zum Beispiel grünen) Punkten ein Viereck bilden?
2) dann nur zwischen den Pixelwerten in diesem Viereck den gelben Punkt suchen?
Vielen Dank im Vorraus
manu