马赛克的原理,即将对应需马赛克处理区域内的像素,按小方块划分,将每一块小方块内不同颜色的像素使用同一颜色进行替代。
方法一:
方法一采用先缩小后放大的方式来对图片进行模糊处理。其效果不是特别明显,只是稍微有一点马赛克的感觉。
代码展示:
import cv2
import numpy as np
if __name__ == '__main__':
img = cv2.imread('./z_girl.jpeg')
# cv2.imshow('img',img)
print(img.shape)
img2 = cv2.resize(img,(601,338))
# cv2.imshow('img',img2)
img3 = cv2.resize(img2,(1202,676))
cv2.imshow('img',img3)
效果:
可能图片看不太清楚,但是雀氏有模糊的感觉,这种方法不太行,pass掉。
方法二:
方法二就是采用numpy中repeat函数对像素进行重复操作,从而实现马赛克效果。
代码展示:
import cv2
import numpy as np
if __name__ == '__main__':
img = cv2.imread('./z_girl.jpeg')
# cv2.imshow('img',img)
print(img.shape)
img2 = cv2.resize(img,(60,34))
img3 = np.repeat(img2,10,axis=0)
img4 = np.repeat(img3, 10, axis=1)
cv2.imshow('img',img4)
cv2.waitKey(0)
cv2.destroyAllWindows()
''' #原理 a = np.array([1,2,3]) print(np.repeat(a,3)) b = np.array([[1,2,3],[4,5,6]]) #从二维变成了一维 print(np.repeat(b,3)) #保持原来维度不变 #0表示行 print(np.repeat(b,3,axis=0)) #1表示列 print(np.repeat(b,3,axis=1)) '''
效果:
方法三:
方法三通过取像素法每n个像素中取一个然后再把窗口放置原来的大小从而实现马赛克效果。
代码展示:
import cv2
import numpy as np
if __name__ == '__main__':
img = cv2.imread('./z_girl.jpeg')
# cv2.imshow('img',img)
print(img.shape)
#每十个像素中取出一个像素
img2 = img[::10,::10]
cv2.namedWindow('img',flags=cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',1202,676)
cv2.imshow('img',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果:
方法四:
局部马赛克。
对局部区域进行颜色替换,从而实现局部马赛克效果。
代码展示:
import cv2
import numpy as np
img = cv2.imread('test.png',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
for m in range(100,200):
for n in range(0,200):
if m%10 == 0 and n%10 == 0: # 将10 * 10的方格内的像素颜色,设置与[m,n]点颜色相同
for i in range(10):
for j in range(10):
(b,g,r) = img[m,n]
img[i+m,j+n] = (b,g,r)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果: