motionBlur

  • 基于opencv2的模糊
def motionBlur(img,size=3):
    # 默认生成一个[0 0 0
                1 1 1
                0 0 0]的核
    kernel_motion_blur = np.zeros((size, size))
    kernel_motion_blur[int((size-1)/2), :] = np.ones(size)
    kernel_motion_blur = kernel_motion_blur / size
    # 应用opencv2的滤波函数
    output = cv2.filter2D(img, -1, kernel_motion_blur)
    return output

原图
模糊之后的图

### 运动模糊在计算机图形学中的实现 运动模糊(Motion Blur)是一种用于模拟现实世界中摄像机拍摄过程中物体移动的效果的技术。这种技术通过计算对象在一段时间内的位置变化来创建一种视觉上的连续感,从而增强图像的真实性和动态效果。 #### 原理概述 运动模糊的核心原理在于模仿真实世界的物理过程。当相机快门开启时,如果被摄物体会发生位移,则最终成像会显示为一条轨迹而非单一清晰的点[^2]。因此,在计算机生成图像的过程中,为了达到类似的视觉感受,通常需要追踪物体在一个帧周期内的路径并将其渲染出来。 #### 实现方式 以下是几种常见的运动模糊实现策略: 1. **基于几何变换的方法** 此类方法主要依赖于改变模型顶点的位置数据以反映其随时间的变化情况。具体来说,可以存储多个时刻下的网格状态,并利用插值算法得到中间过渡阶段的样子。这种方法简单易懂但可能耗费较多资源因为涉及到大量的额外顶点处理工作量[^1]。 2. **Post-processing Techniques (后期处理技术)** 另外一种流行的方式是在完成常规绘制之后再单独执行一次特殊的pass来进行blur操作。这里的关键步骤包括但不限于确定每个像素对应的速度向量以及按照该方向扩展颜色信息形成拖尾现象。此方案相对灵活且易于集成到现有管线当中去[^3]。 ```python def apply_motion_blur(image, velocity_field): blurred_image = np.zeros_like(image) height, width = image.shape[:2] for y in range(height): for x in range(width): dx, dy = velocity_field[y,x] # Calculate new position based on motion vector. nx = int(round(x + dx)) ny = int(round(y + dy)) if 0<=nx<width and 0<=ny<height: blurred_image[ny,nx] += image[y,x]/(abs(dx)+abs(dy)+1e-8) return blurred_image ``` 上述伪代码展示了一个基础版本的post-process motion blur应用逻辑。其中`velocity_field`代表了各个采样点处所经历的实际位移大小与方向;而分母部分则用来控制不同速度下产生的模糊程度差异。 #### 应用领域 除了提升影视作品质量之外,这项技术还广泛应用于游戏开发等领域之中。特别是在高刷新率显示屏普及的情况下,合理运用motion blur能够有效缓解快速动作带来的闪烁问题即所谓的time aliasing effects。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

水煮城府、器

谢谢你的欣赏

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

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

打赏作者

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

抵扣说明:

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

余额充值