2017-07-11 4 views
0

Ich bin mit dieser BibliothekWie konvertiert BufferedImage zu Mat (OpenCV)

<dependency> 
    <groupId>org.bytedeco</groupId> 
    <artifactId>javacv</artifactId> 
    <version>1.3.2</version> 
</dependency> 

OpenCV Version 3.2

Ich fand same Frage mit akzeptierter Antwort hier auf Stackoverflow zu sein scheint, aber es scheint relevant für ältere Versionen der API oder einer anderen Bibliothek sein.

Dieser Code nicht für mich arbeiten ...

public Mat bufferedImageToMat(BufferedImage bi) { 
    Mat mat = new Mat(bi.getHeight(), bi.getWidth(), CvType.CV_8UC3); 
    byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); 
    mat.put(0, 0, data); 
    return mat; 
} 

... weil Mat Klasse nicht Methode

mat.put(0, 0, data); 

Wie gleiches Ziel mit bytedeco javacv 1,3 zu erreichen. 2?

p.s. kann jemand mich zu Dokumentation führen, die ich verwenden kann, um Antworten selbst zu finden, konnte ich bisher keine gute API-Referenz finden.

Antwort

1

ich mit dieser Methode (Arbeiten für Farbe BufferedImage) endete

public Mat bufferedImageToMat(BufferedImage bi) { 
    Mat mat = new Mat(bi.getHeight(), bi.getWidth(), CV_8UC(3)); 

    int r, g, b; 
    UByteRawIndexer indexer = mat.createIndexer(); 
    for (int y = 0; y < bi.getHeight(); y++) { 
     for (int x = 0; x < bi.getWidth(); x++) { 
      int rgb = bi.getRGB(x, y); 

      r = (byte) ((rgb >> 0) & 0xFF); 
      g = (byte) ((rgb >> 8) & 0xFF); 
      b = (byte) ((rgb >> 16) & 0xFF); 

      indexer.put(y, x, 0, r); 
      indexer.put(y, x, 1, g); 
      indexer.put(y, x, 2, b); 
     } 
    } 
    indexer.release(); 
    return mat; 
}