Konvertieren von BufferedImage in Mat (OpenCV) in Java [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Konvertieren von BufferedImage in Mat in opencv 7 Antworten

Ich habe es versuchtVerknüpfung und haben den Code unten. Mein Programm importiert Bilder in einem BufferedImage-Format und zeigt sie dann den Benutzern an. Ich benutze diematchingTemplate Funktion in OpenCV, die erfordert, dass ich es in ein Mat-Format konvertiere.

Der Code funktioniert, wenn ich das Bild importiere -> es in Mat konvertiere und dann das Bild mit imwrite speichere. Das Programm ermöglicht es dem Benutzer auch, ein Bild zuzuschneiden und dann das zu verwendenTemplate-Matching um es mit einem anderen Bild zu vergleichen. Das Problem trat auf, als ich versuchte, das zugeschnittene Bild in Mat zu konvertieren. Ich muss es mit folgendem Code von Int in Byte konvertieren:

im = new BufferedImage(im.getWidth(), im.getHeight(),BufferedImage.TYPE_3BYTE_BGR);

Dies führt jedoch zu einem schwarzen Bild. Aber wenn ich es los werde, funktioniert es nur mit importierten Bildern und nicht zugeschnitten. Was geht hier vor sich? Ich bin mir sicher, dass es etwas mit dem Covering-Prozess zu tun hat, da ich die Vorlagen-Matching-Funktion mit eingelesenen Bildern getestet habe.

// Convert image to Mat
public Mat matify(BufferedImage im) {
    // Convert INT to BYTE
    //im = new BufferedImage(im.getWidth(), im.getHeight(),BufferedImage.TYPE_3BYTE_BGR);
    // Convert bufferedimage to byte array
    byte[] pixels = ((DataBufferByte) im.getRaster().getDataBuffer())
            .getData();

    // Create a Matrix the same size of image
    Mat image = new Mat(im.getHeight(), im.getWidth(), CvType.CV_8UC3);
    // Fill Matrix with image values
    image.put(0, 0, pixels);

    return image;

}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage