2016-04-13 10 views
1

Ich versuche, eine gepufferte Bild zu einer Matrix-Matte, zu konvertieren, aber es wirft einen UnsupportedOperationException, die ich vorher noch nieJPG-Bild konvertieren opencv UnsupportedOperationException

public static Mat readMatImage(String path) { 
    Mat mat = null; 
    BufferedImage image; 
    try { 
     image = ImageIO.read(new FileInputStream(path)); 
     mat = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC3); 
     byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); 
     System.out.println(data[data.length - 1]); 
     mat.put(0, 0, data); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return mat; 
} 
Exception in thread "main" java.lang.UnsupportedOperationException: Provided data element number (4000000) should be multiple of the Mat channels count (3) 
+2

Warum versuchen Sie nicht, das Bild mit 'cv :: imread lesen()' – ZdaR

+0

ich ursprünglich das getan hatte, aber es gab eine Nullpointer 'public static Mat readMatImage (String path) { \t \t Rückkehr Imgcodecs .imread (. \t \t \t \t FileHandler.class.getClass() getResource (Pfad) .getPath() \t \t \t \t); \t} ' –

+0

Dies bedeutet, dass Ihr Pfad ungültig ist oder die Ressource, auf die Sie zugreifen möchten, nicht korrekt formatiert ist. – ZdaR

Antwort

0

ich gesehen habe Denken Sie daran, dass Sie Ihren Read-Image-Typ berücksichtigen sollten, da Ihr Image einkanalig und 8-Bit sein muss, um es in ein mat-Element zu konvertieren. Wenn Ihr Bild RGB ist, versuchen Sie es in ein Binärbild zu konvertieren.