Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV:如何在Java中绘制connectedComponentsWithStats标签_Java_Opencv_Mask_Connected Components - Fatal编程技术网

OpenCV:如何在Java中绘制connectedComponentsWithStats标签

OpenCV:如何在Java中绘制connectedComponentsWithStats标签,java,opencv,mask,connected-components,Java,Opencv,Mask,Connected Components,我试图在某种程度上屏蔽我的二进制图像,它只显示某些标签(由我选择) 这段代码符合我的要求。有人能告诉我更好的方法吗?我想你可以用掩模来完成,而不是迭代每个像素,但是我发现的代码示例总是在C++中,而我无法在java中找到如何使用它。 Mat labels = new Mat(); Mat stats = new Mat(); Mat centroids = new Mat(); List<Integer> labelsToKeep = new ArrayList<>();

我试图在某种程度上屏蔽我的二进制图像,它只显示某些标签(由我选择)

这段代码符合我的要求。有人能告诉我更好的方法吗?我想你可以用掩模来完成,而不是迭代每个像素,但是我发现的代码示例总是在C++中,而我无法在java中找到如何使用它。
Mat labels = new Mat();
Mat stats = new Mat();
Mat centroids = new Mat();
List<Integer> labelsToKeep = new ArrayList<>();
Imgproc.connectedComponentsWithStats(binary, labels, stats, centroids, 4);
for (int i=0; i < stats.height(); i++) {
    // for each label
    if (someCondition)
        labelsToKeep.add(i);
}
Mat mask = new Mat(binary.rows(), binary.cols(), binary.type());
for (int i=0; i < binary.rows(); i++) {
    for (int j=0; j < binary.cols(); j++) {
        // for each pixel
        double[] data = new double[1];
        if (labelsToKeep.contains((int)labels.get(i,j)[0]))
            data[0] = 255;
        else
            data[0] = 0;
        mask.put(i,j, channels);
    }
}
Mat masked = new Mat();
binary.copyTo(masked, mask);
Mat标签=新Mat();
Mat stats=新Mat();
垫质心=新垫();
List labelsToKeep=new ArrayList();
Imgproc.connectedComponentsWithStats(二进制、标签、统计、质心,4);
对于(int i=0;i
问候