python-3.x - OpenCV:如何向整个图像添加人工涂抹/运动模糊效果?

标签 python-3.x opencv blur motion-blur

我想使用 OpenCV 在特定方向上向图像添加人工涂抹/运动模糊效果,以模拟录制图像时因晃动/移动相机而引起的模糊。

在 OpenCV(使用 Python)中这样做的合适方法是什么?

示例图片:

enter image description here

最佳答案

为了实现这种效果,您可以将图像与线段状内核(或 PSF,点扩散函数)进行卷积,如下所示:

img = cv2.imread("Lenna.png")

psf = np.zeros((50, 50, 3))
psf = cv2.ellipse(psf, 
                  (25, 25), # center
                  (22, 0), # axes -- 22 for blur length, 0 for thin PSF 
                  15, # angle of motion in degrees
                  0, 360, # ful ellipse, not an arc
                  (1, 1, 1), # white color
                  thickness=-1) # filled

psf /= psf[:,:,0].sum() # normalize by sum of one channel 
                        # since channels are processed independently

imfilt = cv2.filter2D(img, -1, psf)

为了更真实,您需要在线性域中执行模糊(即反转然后重新应用 sRGB gamma,请参阅 here ,这是另一堆蠕虫),但这个简单的代码可以为您提供以下结果:

来源:

lenna orig

结果:

lenna blurred

关于python-3.x - OpenCV:如何向整个图像添加人工涂抹/运动模糊效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40817634/

相关文章:

python-3.x - 为什么我会收到重复链接?我如何获取下一页上的链接?

c++ - 反射镜角度的解析法

jQuery - 如果为空,则将输入值设置为模糊时的先前值

文本模糊时,Android BlurMaskFilter 在 canvas.drawOval 中无效

python - 在python中,如何将多个语句的条件语句变成像三元运算符一样的简写行?

python - Django REST Framework (ModelViewSet), 405 方法不允许

python - 在 Python 中获取字节数的模数

python - 显示分水岭算法的分割

c# - Emgu CV图像锐化和控制检测

blur - iOS 10 模糊滤镜 css