【图像处理】删除ROI区域之外的噪点并获取外接矩形

目标:去掉ROI区域以外的噪声,进而获取不规则ROI区域的外接矩形。

其中离散点的去除,采用的是opencv中的高斯滤波+OSTU方法进行滤除,但是该方法仍然会降ROI区域中的某些阈值较低的信息给滤除掉,暂时没有想到更好的办法去除离散点

# Author:yx
# Time:2022.7.21
# Function: 去掉ROI区域以外的噪声,进而获取不规则ROI区域的外接矩形。

from tkinter import Image
import cv2
import numpy as np
import skimage

def zuidawaijie(Img):
    Img_H = Img.shape[0]
    Img_W = Img.shape[1]

    Top = 0
    Bottom = 0
    Left = 0
    Right = 0

    # 识别外边框
    # 识别Top的第一个点
    for i in range(Img_H):
        for j in range(Img_W):
            if Img[i, j].all() != 0:
                Top = i
                break
        if Top != 0:
            break

    # 识别Bottom的第一个点
    for i in range(Img_H):
        for j in range(Img_W):
            if Img[Img_H -1 - i, j].all() !=0:
                Bottom = Img_H -1 - i
                break
        if Bottom != 0:
            break

    # 识别Left的第一个点
    for j in range(Img_W):
        for i in range(Img_H):
            if Img[i, j].all() != 0:
                Left = j
                break
        if Left != 0:
            break

    # 识别Right的第一个点
    for j in range(Img_W):
        for i in range(Img_H):
            if Img[i, Img_W -1 - j].all() !=0:
                Right = Img_W - 1 - j
                break
        if Right != 0:
            break

    # top
    for i in range(Left, Right):
        Img[Top, i] = 255
    # bottom
    for i in range(Left, Right):
        Img[Bottom, i] = 255
    # Left
    for i in range(Top, Bottom):
        Img[i, Left] = 255
    # Right
    for i in range(Top, Bottom):
        Img[i, Right] = 255

    cv2.imshow('Img', Img)
    cv2.waitKey()
    cropImg = Img[Top:Bottom, Left:Right]
    return cropImg,Top,Bottom,Left,Right
   



if __name__ == '__main__':
    img = cv2.imread('./calPosition/1328.png', 0)
    blur = cv2.GaussianBlur(img, (3, 3), 0)
    _, binary_img = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    cropbinary_img,Top,Bottom,Left,Right = zuidawaijie(binary_img)
    cropImg = img[Top:Bottom, Left:Right]
    # 上下平移量 负数上移  正数下移
    DUnum = 100
    # 左右平移量 负数左移  正数右移
    LRnum = 100
    img[Top-DUnum:Bottom-DUnum, Left-LRnum:Right-LRnum] = cropImg
    cv2.imshow('img', img)
    cv2.waitKey()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

只搬烫手的砖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值