2016-11-11 1 views
0

Comme ceci:Convertir octet tableau à Mat JavaCV

import org.bytedeco.javacpp.opencv_core.Mat 
import org.bytedeco.javacpp.{opencv_core, opencv_imgcodecs} 

val jpegRawBytes: Array[Byte] = ??? // this is given, not a problem 

val matRaw = new Mat(1, jpegRawBytes.length, opencv_core.CV_8UC1) 
??? // mat.put(jpegRawBytes) 
val matImg = opencv_imgcodecs.imdecode(matRaw, opencv_imgcodecs.IMREAD_COLOR) 

Comment pourrais-je faire la deuxième étape ???, mettre le Array[Byte] dans le Mat?


est ici un, mais il semble très inefficace, avoir à appeler put pour chaque seul octet:

val idxRaw = matRaw.createIndexer[UByteRawIndexer]() 
var i = 0 
while (i < jpegRawBytes.length) { 
    idxRaw.put(0, i, jpegRawBytes(i)) 
    i += 1 
} 

Répondre

0
public static Mat toMat(BufferedImage bi) { 
    OpenCVFrameConverter.ToIplImage cv = new OpenCVFrameConverter.ToIplImage(); 
    Java2DFrameConverter jcv = new Java2DFrameConverter(); 
    return cv.convertToMat(jcv.convert(bi)); 
} 

public static Mat toMat(byte[] bs) { 
    return toMat(toBufferedImage(bs)); 
} 

public static BufferedImage toBufferedImage(byte[] bs) { 
    try { 
     return ImageIO.read(new ByteArrayInputStream(bs)); 
    } catch (IOException ex) { 
     Logger.getLogger(CEIUtils.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return null; 
}