Letterbox, Pillarbox和Pan&Scan的区别

本文介绍了视频在不同显示设备上的呈现方式,包括Letterbox、Pillarbox、Pan&Scan及CCO等显示模式,并解释了采样点高宽比(SAR)与显示设备高宽比(DAR)的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一个关于视频话题,以电视显示为基准,相应的概念和方法可以类推到其它显示设备。


直观地讲,Letterbox指的是16:9的图像在4:3的设备上的显示方法,即图像与设备同宽,在上下添加黑边的显示模式;Pillarbox正好相反,为4:3的图像在16:9的设备的显示模式,左右会被添加黑边;Pan&Scan比较特殊,在4:3的设备上显示16:9的图像时,图像与设备同高,在水平方向多余的图像会被截祛,截取的范围可根据中心点偏移来调整;CCO是一种特殊的Pan&Scan,其中心点偏移为0。


要更好地理解这个问题,需要明确的是,设备的像素点大都不是方形的,包括采样设备和显示设备。采样点的高宽比,称为SAR,显示设备的高宽比,称为DAR。比如同样是720*480的图像,若SAR为9:8时,图像尺寸为4:3;若SAR为32:27时,图像尺寸为16:9。换句话说,当SAR为9:8时,720*480的图像只有在DAR为4:3的设备上显示时,圆是圆,方是方,否则圆将是椭圆,方将是长方。


SAR或DAR被打包在码流当中MPEG-2定义了3种,H.264定义了一堆。实现时要根据码流中的信息,用户设置的目标电视的型号,及显示处理模式来综合考虑。

 

介绍28本学习linux的经典教材和书籍

### Letterbox与Resize的区别及用法 #### 基本概念 Letterboxing 是一种图像处理技术,用于调整图像尺寸的同时保持其原始纵横比。相比之下,普通的 Resize 方法可能会改变图像的宽高比例,从而导致变形。 在计算机视觉领域,Letterboxing 的主要目的是通过向图像周围添加填充(通常是黑色像素),使图像适配目标尺寸而不失真[^1]。而传统的 Resize 则可能拉伸或压缩图像以匹配指定的目标尺寸,这可能导致对象形状被扭曲。 #### 实现细节对比 当使用 OpenCV 进行图像预处理时,可以通过计算顶部、底部、左侧右侧的填充量来完成 Letterboxing 操作。具体来说: - **Top**: `(letterbox_rows - resize_rows) / 2` - **Bottom**: `(letterbox_rows - resize_rows + 1) / 2` - **Left**: `(letterbox_cols - resize_cols) / 2` - **Right**: `(letterbox_cols - resize_cols + 1) / 2` 这些参数定义了如何围绕缩小后的图像均匀分布额外的空间[^2]。 对于 YOLOv5 或其他先进的目标检测框架而言,优化版 letterbox 策略会尝试最小化不必要的填充区域,减少数据冗余并提升模型推理效率[^3]。而在最新版本如 YOLOv8 中,不仅实现了更高效的图像调整方法,还同步考虑到了标注框坐标的相应变换逻辑[^4]。 以下是基于 Python OpenCV 的简单示例代码展示两种方式的应用场景差异: ```python import cv2 import numpy as np def simple_resize(image, target_width, target_height): """直接缩放到固定大小""" resized = cv2.resize(image, (target_width, target_height)) return resized def apply_letterbox(image, target_size, color=(0, 0, 0)): """应用信封式填充至特定大小""" height, width = image.shape[:2] ratio = min(target_size[0]/height, target_size[1]/width) new_unpad = int(round(width * ratio)), int(round(height * ratio)) dw = (target_size[1] - new_unpad[0]) // 2 dh = (target_size[0] - new_unpad[1]) // 2 img_resized = cv2.resize(image, new_unpad, interpolation=cv2.INTER_LINEAR) result = cv2.copyMakeBorder(img_resized, top=dh, bottom=dh, left=dw, right=dw, borderType=cv2.BORDER_CONSTANT, value=color) return result ``` 上述函数 `simple_resize()` 展示了一个基本的重设大小操作;相反地,`apply_letterbox()` 函数则体现了完整的字母盒流程——先按比例裁剪再补全空白区。 #### 总结 因此,在实际项目开发过程中选择哪种手段取决于具体需求:如果优先级在于维持物体的真实外观特征,则推荐采用 letterbox 技术;反之若是单纯追求快速简便的数据转换过程的话,常规意义上的 resize 就已经足够满足条件了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值