2016-02-24 7 views
0

Что такое правильный способ использовать класс Мат в OpenCV (с использованием Java)Использование Мат в OpenCV с помощью Java

Mat класса ==> org.opencv.core.Mat и я должен использовать BufferedImage когда я хочу прочитать изображение в Mat. пожалуйста, покажите мне код ответа

import java.awt.image.BufferedImage; 
import java.awt.image.DataBufferByte; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 

import org.opencv.core.*; 

public class opencv { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     BufferedImage img1 = null, img2 = null; 
     try { 
      img1 = ImageIO.read(new File("c:\\test.jpg")); 
      // img1 = ImageIO.read(new File("c:\\Fig2.tif")); 
      System.out.print(img1.getHeight()); 
     } catch (IOException e) { 
     } 

     //byte[] pxl1 = ((DataBufferByte) img1.getRaster()).getData(); 
     //Mat src1 = new Mat(""); 
     //Core.addWeighted(Mat1, alpha, Mat2, beta, gamma, dst); 

    } 

} 

ответ

1

Если предположить, что изображение является 3 канала:

public Mat fromBufferedImage(BufferedImage img) { 
    byte[] pixels = ((DataBufferByte) img.getRaster().getDataBuffer()).getData(); 
    Mat mat = new Mat(img.getHeight(), img.getWidth(), CvType.CV_8UC3); 
    mat.put(0, 0, pixels); 
    return mat; 
} 

и обратное:

public BufferedImage toBufferedImage(Mat mat) { 
    int type = BufferedImage.TYPE_BYTE_GRAY; 
    if (mat.channels() > 1) { 
     type = BufferedImage.TYPE_3BYTE_BGR; 
    } 
    byte[] bytes = new byte[mat.channels() * mat.cols() * mat.rows()]; 
    mat.get(0, 0, bytes); 
    BufferedImage img = new BufferedImage(mat.cols(), mat.rows(), type); 
    final byte[] pixels = ((DataBufferByte) img.getRaster().getDataBuffer()).getData(); 
    System.arraycopy(bytes, 0, pixels, 0, bytes.length); 
    return img; 
} 
+0

хорошо ТНХ для объяснения, я должен использовать BufferedImage ? это дает исключение на .tif изображениях, как я могу решить это. – Muath

+0

Вероятно, причина, по которой вы видите исключение, связана с тем, что BufferedImage, который вы предоставляете, является нулевым. ImageIO не поддерживает TIFF без добавления некоторых библиотек. См. Здесь: http://stackoverflow.com/questions/2898311/reading-and-writing-out-tiff-image-in-java] –