2016-10-10 7 views
0

Я пытаюсь преобразовать BufferedImage в Mat, используемый в OpenCV.Преобразование BufferedImage в OpenCv Mat

код я нашел для этого (на многих сайтах, в том числе StackOverflow) является:

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; 
    } 

Eclipse, дает мне следующую ошибку:

DataBufferType не может быть разрешен к типу.

Я импортировал java.awt.image.BufferedImage; поэтому эта проблема не может быть проблемой.

Любые идеи? Или, может быть, еще один способ сделать это преобразование?

+0

BufferedImages имеют тип. Проверьте, является ли это «BufferedImage.TYPE_INT_RGB» или имеет другой тип ... –

ответ

0

Это то, что я закончил с

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; 
}