You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于OpenCV轮廓检测提取网页截图中的YouTube视频矩形区域

改进方案

针对网页布局的规整性,可从颜色特征、轮廓筛选规则、形态学操作等方向优化,精准定位视频区域:

1. 利用颜色特征直接定位

YouTube暂停状态下的视频背景蓝色是强特征,直接在HSV空间做颜色分割:

import numpy as np
import cv2

# 转换到HSV空间,定义蓝色范围(可根据实际截图微调)
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
lower_blue = np.array([90, 50, 50])
upper_blue = np.array([130, 255, 255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)

# 形态学闭运算填补内部小空洞,强化轮廓
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 15))
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

# 从掩码中提取轮廓并筛选
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
    x, y, w, h = cv2.boundingRect(cnt)
    # 过滤掉过小的区域
    if w > src.shape[1]//3 and h > src.shape[0]//3:
        cv2.rectangle(src, (x, y), (x+w, y+h), (0, 255, 0), 2)
        break

2. 优化轮廓筛选规则

若坚持用灰度阈值方案,别只看面积最大,结合网页布局的特征筛选:

  • 视频区域宽高比接近16:9或4:3
  • 位置处于画面中央(排除顶部导航、底部评论区)
  • 面积占屏幕比例在合理区间

示例筛选代码:

screen_h, screen_w = src.shape[:2]
target_contour = None

for cnt in contours:
    x, y, w, h = cv2.boundingRect(cnt)
    aspect_ratio = w / h
    area_ratio = (w*h) / (screen_w * screen_h)
    
    # 筛选条件:宽高比1.2~1.8,面积占比0.2~0.6,垂直位置在屏幕1/5到4/5之间
    if 1.2 < aspect_ratio < 1.8 and 0.2 < area_ratio < 0.6 and y > screen_h//5 and (y+h) < screen_h*4//5:
        target_contour = cnt
        break

if target_contour:
    x, y, w, h = cv2.boundingRect(target_contour)
    cv2.rectangle(src, (x,y), (x+w,y+h), (0,255,0), 2)

3. 替换阈值化方法

放弃自适应阈值,改用边缘增强+全局阈值:

gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
# Sobel算子增强边缘
sobel_x = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=3)
edge = cv2.magnitude(sobel_x, sobel_y)
edge = cv2.convertScaleAbs(edge)
# 全局阈值二值化突出边缘
_, img_th = cv2.threshold(edge, 50, 255, cv2.THRESH_BINARY)

# 后续再找轮廓、筛选
contours, hierarchy = cv2.findContours(img_th, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)

4. 结合网页结构先验知识

网页布局有固定规律:

  • 视频区域上下是导航栏、评论区,左右可能有侧边栏
  • 用霍夫直线检测找出水平/垂直强直线,拼接出中间矩形
  • 或统计灰度图行/列的像素值变化,找到连续的边界区域

内容的提问来源于stack exchange,提问作者yash mittal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 22:50:28