【Opencv--实现抠图】求出连通区域所占的矩形框

【Opencv–实现抠图】求出连通区域所占的矩形框

1. 需求和方法

1.1 需求

本项目所要扣的物体是裂缝,也适用于其他的物体目标。

1.2 方法

  • 先对图像进行二值化;
  • 再对图像求连通区域(Opencv–API);
  • 挑选最大的连通区域位置(原图像0位置除外);
  • 对该连通区域进行保存。

2. 先验知识

3. 代码实现

import cv2
import numpy as np

def getRec(img):
          img2 = img.copy()

          kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
          
          # 可能存在断的裂缝,存在多个连通区域,此时进行膨胀操作
          img = cv2.dilate(img, kernel, 3)

          # 求黑白图像中的连通区域
          _, _, stats, _ = cv2.connectedComponentsWithStats(img, connectivity=8)

          img1 = np.zeros_like(img)

          a = [s[-1] for s in stats[1:]]
          a = np.array(a)
          
          # 选择最大的连通区域,作为裂缝区域
          ind = np.argmax(a) + 1

          # 存储裂缝区域的外接矩形
          x, y, h, w = stats[ind][0], stats[ind][1], stats[ind][2], stats[ind][3]

          img1 = img2[y:y+w, x:x+h]

          return img1

img_name = 'a.jpg'
img = cv2.imread("image/ori/" + img_name, 0)
img1 = getRec(img)
cv2.imwrite('image/final/'+ img_name, img1)

4. 前后效果

4.1 原图像

在这里插入图片描述

4.2 处理后

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋冬无暖阳°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值