public static void Mat_to_vector_DMatch(Mat m, List<DMatch> matches) { if (matches == null) throw new java.lang.IllegalArgumentException("Output List can't be null"); int count = m.rows(); if (CvType.CV_64FC4 != m.type() || m.cols() != 1) throw new java.lang.IllegalArgumentException( "CvType.CV_64FC4 != m.type() || m.cols()!=1\n" + m); matches.clear(); double[] buff = new double[4 * count]; m.get(0, 0, buff); for (int i = 0; i < count; i++) { matches.add(new DMatch((int) buff[4 * i], (int) buff[4 * i + 1], (int) buff[4 * i + 2], (float) buff[4 * i + 3])); } }
public void fromArray(DMatch...a) { if(a==null || a.length==0) return; int num = a.length; alloc(num); float buff[] = new float[num * _channels]; for(int i=0; i<num; i++) { DMatch m = a[i]; buff[_channels*i+0] = m.queryIdx; buff[_channels*i+1] = m.trainIdx; buff[_channels*i+2] = m.imgIdx; buff[_channels*i+3] = m.distance; } put(0, 0, buff); //TODO: check ret val! }
public DMatch[] toArray() { int num = (int) total(); DMatch[] a = new DMatch[num]; if(num == 0) return a; float buff[] = new float[num * _channels]; get(0, 0, buff); //TODO: check ret val! for(int i=0; i<num; i++) a[i] = new DMatch((int) buff[_channels*i+0], (int) buff[_channels*i+1], (int) buff[_channels*i+2], buff[_channels*i+3]); return a; }