黑边检测|蒙版检测 边缘检测 霍夫曼直线检测(附代码)

一、背景介绍
实际应用场景中,图片或视频中可能会存在黑边,影响美观度,不适合推荐给用户,本文主要是介绍如何去除黑边和蒙版。
(限于篇幅,以图像蒙版去除为例子,进行讲解)

(1) 先看下效果
A图和C图是带有蒙版的的视频帧(图像),B图和D图是检测蒙版并进行裁剪后的图像,可以看出,该算法可以完美去除蒙版。【黑边去除更易】

下面的分数表示基于蒙版的遮盖程度,对该图片进行打分,分数越高,说明视频被遮挡的区域越小
在这里插入图片描述
(2)算法流程

(a)先用candy算子进行边缘检测
(b)使用霍夫曼直线检测,检测直线
(c)NMS非极大值抑制去除多余直线
(d)按照一定规则选取最终的2条直线

对每一步进行可视化:
上图是有蒙版的,下图是无蒙版的
在这里插入图片描述

二、代码

#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
import os
import cv2
from math import cos,sin

def lines_detector_hough(edge,ThetaDim = None,DistStep = None,threshold = None,halfThetaWindowSize = 2,halfDistWindowSize = None):
    '''
    :return: 返回检测出的所有直线的参数(theta,dist)
    参考了:https://github.com/o0o0o0o0o0o0o/image-processing-from-scratch,欢迎给他点小星星
    '''
    imgsize = edge.shape
    if ThetaDim == None:
        ThetaDim = 90
    if DistStep == None:
        DistStep = 1
    MaxDist = np.sqrt(imgsize[0]**2 + imgsize[1]**2)
    DistDim = int(np.ceil(MaxDist/DistStep))

    if halfDistWindowSize == None:
        halfDistWindowSize = int(DistDim/50)
    accumulator = np.zeros((ThetaDim,DistDim)) # theta的范围是[0,pi). 在这里将[0,pi)进行了线性映射.类似的,也对Dist轴进行了线性映射

    sinTheta = [np.sin(t*np.pi/ThetaDim) for t in range(ThetaDim)]
    cosTheta = [np.cos(t*np.pi/ThetaDim) for t in range(ThetaDim)]

    for i in range(imgsize[0]):
        for j in range(imgsize[1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值