OpenCV API For JAVA —— findContours 查找轮廓

public static void findContours(Mat image, 
                                List contours, 
                                Mat hierarchy, 
                                int mode, 
                                int method)

public static void findContours(Mat image, 
                                List contours, 
                                Mat hierarchy, 
                                int mode, 
                                int method, 
                                Point offset)
  • image    一个8位的单通道图像。非零像素被视为1,0像素仍然是0。图像被当作二进制来处理。如果使用的 mode 是  RETR_CCOMP 或者 RETR_FLOODFILL , 那么输入的图像类型也可以是32位单通道整型,即 CV_32SC1
  • contours    检测到的轮廓。一个 MatOfPoint 保存一个轮廓,所有轮廓放在 List 中。
  • hierarchy    可选的输出。包含轮廓之间的联系。4通道矩阵,元素个数为轮廓数量。通道【0】~ 通道【3】对应保存:后一个轮廓下标,前一个轮廓下标,父轮廓下标,内嵌轮廓下标。如果没有后一个,前一个,父轮廓,内嵌轮廓,那么该通道的值为 -1。
  • mode    轮廓检索模式。
RETR_EXTERNAL 只检测最外围的轮廓。
RETR_LIST 检测所有轮廓,不建立等级关系,彼此独立。
RETR_CCOMP 检测所有轮廓,但所有轮廓都只建立两个等级关系 。
RETR_TREE 检测所有轮廓,并且所有轮廓建立一个树结构,层次完整。
RETR_FLOODFILL 洪水填充法

 

 

 

 

 

 

  • method    轮廓近似法
CHAIN_APPROX_NONE  保存物体边界上所有连续的轮廓点
CHAIN_APPROX_SIMPLE  压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
CV_CHAIN_APPROX_TC89_L1 使用Teh-Chin 链近似算法
CV_CHAIN_APPROX_TC89_KCOS 使用Teh-Chin 链近似算法
  • offset    可选的偏移量。

例子:

List contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(markerMask, contours, hierarchy, Imgproc.RETR_CCOMP, Imgproc.CHAIN_APPROX_SIMPLE);
System.out.println("轮廓数量:"+ contours.size());
System.out.println("hierarchy类型:"+ hierarchy);
for(int k=0;k

输出:

OpenCV API For JAVA —— findContours 查找轮廓_第1张图片

 

 

 

 

 

 

 

你可能感兴趣的:(OpenCV)