Hallo,
hänge gerade am folgenden Problem fest. Der Code hier funktioniert einwandfrei (sofern man eine jpg-Datei benutzt. Das ist aber eine andere Geschichte). In der Zeile 20-22 wird das BufferedImage Objekt in ein Mat um gewandelt (Mat ist ein OpenCV spezifisches Objekt zum laden von Bildern). Anschließend werden Funktionen der OpenCV aufgerufen und in der Zeile 27-30 wird das Mat wieder in ein BufferedImage überführt.
Ich habe den Code aus den Zeilen 20-22 und 27-30 übernommen und mir daraus paar Funktionen gebastelt:
und
Also genau das Gleiche.
Die Bildverarbeitungsoperationen aus OpenCV habe ich ebenfalls in eine separate Funktion gepackt:
Für die Konvertierung rufe ich die beiden Funktionen img2Mat() und mat2Img() auf.
In der main lade ich mir ein Bild und packe es in die hello Funktion rein.
Wenn ich nun den Code ausführe, bekomme ich Fehlermeldungen in folgender Reihenfolge: Zeile 4 in der mat2Img() Methode, in der Zeile 3 in der hello-Methode und in der Zeile 11 in der main. Also wo ich die hello-Methode aufrufe.
Der Fehler liegt anscheinend in der mat2Img() Methode.
Ich versteht das nicht. Im Grude mache ich doch das Gleiche wie im ersten Codeblock, nur anderes hingeschrieben. :bahnhof:
Hoffe ihr könnt mir da weiterhelfen!
hänge gerade am folgenden Problem fest. Der Code hier funktioniert einwandfrei (sofern man eine jpg-Datei benutzt. Das ist aber eine andere Geschichte). In der Zeile 20-22 wird das BufferedImage Objekt in ein Mat um gewandelt (Mat ist ein OpenCV spezifisches Objekt zum laden von Bildern). Anschließend werden Funktionen der OpenCV aufgerufen und in der Zeile 27-30 wird das Mat wieder in ein BufferedImage überführt.
Java:
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
public class Main {
public static void main( String[] args ){
try {
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
Mat source = Highgui.imread("20150113_122621.jpg",
Highgui.CV_LOAD_IMAGE_COLOR);
Mat destination = new Mat(source.rows(),source.cols(),source.type());
Imgproc.GaussianBlur(source, destination,new Size(45,45), 0);
Highgui.imwrite("Gaussian45.jpg", destination);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Java:
public static Mat img2Mat(BufferedImage image)
{
//BufferedImage image = myBufferedImage;
byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
Mat mat = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC3);
mat.put(0, 0, data);
return mat;
}
Java:
public static BufferedImage mat2Img(Mat mat1) {
byte[] data1 = new byte[mat1.rows() * mat1.cols() * (int)(mat1.elemSize())];
mat1.get(0, 0, data1);
BufferedImage image1 = new BufferedImage(mat1.cols(),mat1.rows(), BufferedImage.TYPE_BYTE_GRAY);
image1.getRaster().setDataElements(0, 0, mat1.cols(), mat1.rows(), data1);
return image1;
}
Die Bildverarbeitungsoperationen aus OpenCV habe ich ebenfalls in eine separate Funktion gepackt:
Java:
static public BufferedImage hello(BufferedImage img){
Mat source = img2Mat(img);
BufferedImage result=null;
try{
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
Mat destination = new Mat(source.rows(),source.cols(),source.type());
Imgproc.GaussianBlur(source, destination, new Size(0,0), 10);
Core.addWeighted(source, 1.5, destination, -0.5, 0, destination);
result = mat2Img(destination);
}catch (Exception e) {
}
return result;
}
In der main lade ich mir ein Bild und packe es in die hello Funktion rein.
Java:
public static void main(String[] args) {
try {
BufferedImage bImage=null;
bImage = ImageIO.read(new File("20150113_122621.jpg"));
} catch (IOException e) {
}
hello(bImage);
}
Wenn ich nun den Code ausführe, bekomme ich Fehlermeldungen in folgender Reihenfolge: Zeile 4 in der mat2Img() Methode, in der Zeile 3 in der hello-Methode und in der Zeile 11 in der main. Also wo ich die hello-Methode aufrufe.
Der Fehler liegt anscheinend in der mat2Img() Methode.
Ich versteht das nicht. Im Grude mache ich doch das Gleiche wie im ersten Codeblock, nur anderes hingeschrieben. :bahnhof:
Hoffe ihr könnt mir da weiterhelfen!