如何在OpenCV中提取由轮廓约束的区域?

如何在OpenCV中提取由轮廓约束的区域?,opencv,image-processing,computer-vision,Opencv,Image Processing,Computer Vision,我是OpenCV新手,我试图提取由最大轮廓限定的区域。这可能是一个简单的问题,但我无法理解。我也尝试过谷歌搜索,但运气不好。我会: 使用contourArea()查找最大的闭合轮廓 使用boundingRect()获取该轮廓的边界 使用drawContours()(厚度设置为-1到 填充轮廓)并将其用作遮罩 使用遮罩设置原始图像中的所有像素,而不是 投资回报率为(0,0,0) 使用边界矩形仅从图形中提取该区域 原始图像 我想: 使用contourArea()查找最大的闭合轮廓 使用boundin

我是OpenCV新手,我试图提取由最大轮廓限定的区域。这可能是一个简单的问题,但我无法理解。我也尝试过谷歌搜索,但运气不好。

我会:

  • 使用
    contourArea()
    查找最大的闭合轮廓

  • 使用
    boundingRect()
    获取该轮廓的边界

  • 使用
    drawContours()
    (厚度设置为-1到 填充轮廓)并将其用作遮罩

  • 使用遮罩设置原始图像中的所有像素,而不是 投资回报率为(0,0,0)

  • 使用边界矩形仅从图形中提取该区域 原始图像

  • 我想:

  • 使用
    contourArea()
    查找最大的闭合轮廓

  • 使用
    boundingRect()
    获取该轮廓的边界

  • 使用
    drawContours()
    (厚度设置为-1到 填充轮廓)并将其用作遮罩

  • 使用遮罩设置原始图像中的所有像素,而不是 投资回报率为(0,0,0)

  • 使用边界矩形仅从图形中提取该区域 原始图像

  • 很好地解释了你想要做什么

    基本上,你必须:

    • 将阈值应用于原始图像的副本
    • 使用findContours->输出为:

      vector<vector<Point>>
      
      向量
      
      存储轮廓

    • 在等高线上迭代以找到最大的等高线
      • 很好地解释了您想要做什么

        基本上,你必须:

        • 将阈值应用于原始图像的副本
        • 使用findContours->输出为:

          vector<vector<Point>>
          
          向量
          
          存储轮廓

        • 在等高线上迭代以找到最大的等高线

        感谢您的回复。我已经找到了最大的轮廓。问题是我无法提取里面的区域。谢谢你的回复。我已经找到了最大的轮廓。问题是我无法提取出里面的区域。我试图使用这种方法。我正在使用python。我试着在一张空白图像上画轮廓,然后用白色填充。然后我尝试执行按位_和,但它给出了错误,表示类型不匹配。我不知道你说的是什么,我发现了我的错误。在python中,opencv映像被实现为uint8的numpy数组。但是我创建的面具是一个浮动数组。因此,当我修复它时,我能够执行按位的_和。尽管如此,还是要感谢你的帮助:)我正试图使用这种方法。我正在使用python。我试着在一张空白图像上画轮廓,然后用白色填充。然后我尝试执行按位_和,但它给出了错误,表示类型不匹配。我不知道你说的是什么,我发现了我的错误。在python中,opencv映像被实现为uint8的numpy数组。但是我创建的面具是一个浮动数组。因此,当我修复它时,我能够执行按位的_和。谢谢你的帮助:)