How to Iterate in OpenCV4Android

爱⌒轻易说出口 提交于 2019-12-01 01:38:10

i guess there are no default iterators in OpenCV4Android. So solved it with normal iteration.

Same result as C++ code but instead of taking height and width i took main image in to function and got height and width from it anything would be jst fine.

public static Mat show_result(Mat labels, Mat centers, Mat imageMat){

        centers.convertTo(centers, CvType.CV_8UC1, 255.0);
        centers.reshape(3);

        List<Mat> clusters = new ArrayList<Mat>();
        for(int i = 0; i < centers.rows(); i++) {
            clusters.add(Mat.zeros(imageMat.size(), imageMat.type()));
        }

        SparseIntArray counts = new SparseIntArray();
        for(int i = 0; i < centers.rows(); i++) counts.put(i, 0);

        int rows = 0;
        for(int y = 0; y < imageMat.rows(); y++) {
            for(int x = 0; x < imageMat.cols(); x++) {
                int label = (int)labels.get(rows, 0)[0];
                int r = (int)centers.get(label, 2)[0];
                int g = (int)centers.get(label, 1)[0];
                int b = (int)centers.get(label, 0)[0];
                counts.put(label, counts.get(label) + 1);
                clusters.get(label).put(y, x, b, g, r);
                rows++;
            }
        }
        System.out.println(counts);
        return combineClusters(clusters);
    }

    public  static Mat combineClusters(List<Mat> clusters){

        Mat result = new Mat(clusters.get(0).size(), CvType.CV_8UC3);
        result.setTo(new Scalar(0));

        for(int i=0; i < clusters.size(); i++){
            Core.bitwise_xor(result, clusters.get(i), result);
        }

        return result;
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!