这篇文章主要介绍了 Python 实现 PS 滤镜中马赛克效果, 涉及 Python 基于 skimage 库的图形马赛克效果相关实现技巧, 需要的朋友可以参考下
本文实例讲述了 Python 实现 PS 滤镜中马赛克效果分享给大家供大家参考, 具体如下:
这里利用 Python 实现 PS 滤镜中的马赛克效果, 具体的算法原理和效果可以参考附录说明, Python 示例代码如下:
- from skimage import img_as_float
- import matplotlib.pyplot as plt
- from skimage import io
- import random
- import numpy as np
- file_name='D:/Visual Effects/PS Algorithm/4.jpg';
- img=io.imread(file_name)
- img = img_as_float(img)
- img_out = img.copy()
- row, col, channel = img.shape
- half_patch =10
- for i in range(half_patch, row-1-half_patch, half_patch):
- for j in range (half_patch, col-1-half_patch, half_patch):
- k1 = random.random() - 0.5
- k2 = random.random() - 0.5
- m=np.floor(k1*(half_patch*2 + 1))
- n=np.floor(k2*(half_patch*2 + 1))
- h=int((i+m) % row)
- w=int((j+n) % col)
- img_out[i-half_patch:i+half_patch, j-half_patch:j+half_patch, :] =\
- img[h, w, :]
- plt.figure(1)
- plt.imshow(img)
- plt.axis('off')
- plt.figure(2)
- plt.imshow(img_out)
- plt.axis('off')
- plt.show()
附: PS 滤镜算法原理 马赛克
% method : 利用邻域的任意一点代替当前邻域所有像素点
- %%%% mosaic
- clc;
- clear all;
- addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm');
- Image=imread('4.jpg');
- Image=double(Image);
- size_info=size(Image);
- height=size_info(1);
- width=size_info(2);
N=11; % 控制邻域大小
- Image_out=Image;
- for i=1+N:N:height-N
- for j=1+N:N:width-N
- k1=rand()-0.5;
- k2=rand()-0.5;
- m=(k1*(N*2-1));
- n=(k2*(N*2-1));
- h=floor(mod(i+m,height));
- w=floor(mod(j+n,width));
- if w==0;
- w=width;
- end
- if h==0
- h=height;
- end
- Image_out(i-N:i+N,j-N:j+N,1)=Image(h,w,1);
- Image_out(i-N:i+N,j-N:j+N,2)=Image(h,w,2);
- Image_out(i-N:i+N,j-N:j+N,3)=Image(h,w,3);
- end
- end
- imshow(Image_out/255);
原图
效果图
希望本文所述对大家 Python 程序设计有所帮助
来源: http://www.phperz.com/article/18/0222/362972.html