First time here? Check out the FAQ!
I use my own Mat <-> xml read/write.
/* * Only implement XML <-> opencv Mat read and write. */ public class TaFileStorage { // static public static final int READ = 0; public static final int WRITE = 1; // varaible private File file; private boolean isWrite; private Document doc; private Element rootElement; public TaFileStorage() { file = null; isWrite = false; doc = null; rootElement = null; } // read or write public void open(String filePath, int flags ) { try { if( flags == READ ) { open(filePath); } else { create(filePath); } } catch(Exception e) { e.printStackTrace(); } } // read only public void open(String filePath) { try { file = new File(filePath); if( file == null || file.isFile() == false ) { System.err.println("Can not open file: " + filePath ); } else { isWrite = false; doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file); doc.getDocumentElement().normalize(); } } catch(Exception e) { e.printStackTrace(); } } // write only public void create(String filePath) { try { file = new File(filePath); if( file == null ) { System.err.println("Can not wrtie file: " + filePath ); } else { isWrite = true; doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); rootElement = doc.createElement("opencv_storage"); doc.appendChild(rootElement); } } catch(Exception e) { e.printStackTrace(); } } public Mat readMat(String tag) { if( isWrite ) { System.err.println("Try read from file with write flags"); return null; } NodeList nodelist = doc.getElementsByTagName(tag); Mat readMat = null; for( int i = 0 ; i<nodelist.getLength() ; i++ ) { Node node = nodelist.item(i); if( node.getNodeType() == Node.ELEMENT_NODE ) { Element element = (Element)node; String type_id = element.getAttribute("type_id"); if( "opencv-matrix".equals(type_id) == false) { System.out.println("Fault type_id "); } String rowsStr = element.getElementsByTagName("rows").item(0).getTextContent(); String colsStr = element.getElementsByTagName("cols").item(0).getTextContent(); String dtStr = element.getElementsByTagName("dt").item(0).getTextContent(); String dataStr = element.getElementsByTagName("data").item(0).getTextContent(); int rows = Integer.parseInt(rowsStr); int cols = Integer.parseInt(colsStr); int type = CvType.CV_8U; Scanner s = new Scanner(dataStr); if( "f".equals(dtStr) ) { type = CvType.CV_32F; readMat = new Mat( rows, cols, type ); float fs[] = new float[1]; for( int r=0 ; r<rows ; r++ ) { for( int c=0 ; c<cols ; c++ ) { if( s.hasNextFloat() ) { fs[0] = s.nextFloat(); } else { fs[0] = 0; System.err.println("Unmatched number of float value at rows="+r + " cols="+c); } readMat.put(r, c, fs); } } } else if( "i".equals(dtStr) ) { type = CvType.CV_32S; readMat = new Mat( rows, cols, type ); int is[] = new int[1]; for( int r=0 ; r<rows ; r++ ) { for( int c=0 ; c<cols ; c++ ) { if( s.hasNextInt() ) { is[0] = s.nextInt(); } else { is[0] = 0; System.err.println("Unmatched number of int value at rows="+r + " cols="+c); } readMat.put(r, c, is); } } } else if( "s".equals(dtStr) ) { type = CvType.CV_16S; readMat = new Mat( rows, cols, type ); short ss[] = new short[1]; for( int r=0 ; r<rows ; r++ ) { for( int c=0 ; c<cols ; c++ ) { if( s.hasNextShort() ) { ss[0] = s.nextShort(); } else { ss[0] = 0; System.err.println("Unmatched number of int value at rows="+r + " cols="+c); } readMat.put(r, c, ss); } } } else if( "b".equals(dtStr) ) { readMat = new Mat( rows, cols, type ); byte bs[] = new byte[1]; for( int r=0 ; r<rows ; r++ ) { for( int c=0 ; c<cols ; c++ ) { if( s.hasNextByte() ) { bs[0 ...