python-opencv-图像毛玻璃模糊效果

Posted 天子骄龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-opencv-图像毛玻璃模糊效果相关的知识,希望对你有一定的参考价值。

毛玻璃其实就是磨砂玻璃,图像经过毛玻璃模糊效果后能够模糊的看清背后的风景,让人感觉有种朦胧美,让界面看上去很有层次感。
我们知道了图像马赛克效果是通过设置一个指定大小的像素块并将其中的所有像素点设置成统一值实现的。与图像的马赛克效果类似,图像的毛玻璃模糊效果也是通过修改像素点的颜色值来实现的,只不过是通过像素点随机替换来修改像素点的颜色值

 

如上图所示,左边为原图像的某5个像素点,我们假设随机替换值为5,即随机替换的范围为0-4。那么对于原图像上的某个像素点(x,y)的颜色值,我们将用原图像上的另一个像素点(x+随机值,y+随机值)的颜色值进行替换,即(x,y)=(x+随机值,y+随机值)。经过一系列像素点变换后,就得到了类似右边的图像,从而实现图像的毛玻璃模糊效果。

 

首先按照惯例使用imread()函数读取原图像的图像数据,并通过shape属性获取出图像的宽高信息。接着新建一个图像空模板,大小和形状与原图像保持一致。同时设置随机替换值,这里我们设置为5。然后开始遍历像素点,利用我们设置的随机替换值使用random模块的random.randint函数产生一个随机整数值,对像素点进行随机替换。 

import cv2
import numpy as np
import random

img = cv2.imread("2013.jpg",1)  #读取一张图片,彩色
cha=img.shape
height,width,deep=cha
cv2.imshow(\'img\',img)
dst=np.zeros(cha,np.uint8)
randon_v=5  #用来替换的范围--这个值越大毛玻璃效果越明显
#防止越界
for m in range(height-randon_v):  #毛玻璃效果
    for n in range(width-randon_v):
        index=random.randint(1,randon_v)
        (b,g,r)=img[m+index,n+index]
        dst[m,n]=(b,g,r)
cv2.imshow(\'dst\',dst)
cv2.waitKey()

右边的图就实现了图像的毛玻璃模糊效果,根据我们设置的随机替换值大小,毛玻璃的模糊程度会随之不同。随机替换值越大,毛玻璃模糊程度也就越大。由于我们未对边界值进行处理,因此经过毛玻璃模糊效果处理后的图像右边和下边都有黑色的边界。如果要处理,最简单的可以遍历黑色边界像素,用附近像素的颜色值进行填充即可。 

效果图:

 

 

下面我把随机值改为10:

import cv2
import numpy as np
import random

img = cv2.imread("2013.jpg",1)  #读取一张图片,彩色
cha=img.shape
height,width,deep=cha
cv2.imshow(\'img\',img)
dst=np.zeros(cha,np.uint8)
randon_v=10  #用来替换的范围--这个值越大毛玻璃效果越明显
#防止越界
for m in range(height-randon_v):
    for n in range(width-randon_v):
        index=random.randint(1,randon_v)
        (b,g,r)=img[m+index,n+index]
        dst[m,n]=(b,g,r)
cv2.imshow(\'dst\',dst)
cv2.waitKey()

效果图:

 

  

以上是关于python-opencv-图像毛玻璃模糊效果的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用背景图像的情况下获得背景磨砂玻璃效果

iOS 高斯模糊 毛玻璃效果

教你几行代码实现图片的模糊效果

iOS 8 模糊视图(毛玻璃效果)的简单实现UIVisualEffectView

PS 如何制作Vista的毛玻璃效果

[python-opencv] 模糊操作