带你认识Python图像量化处理及局部马赛克特效( 三 )

其输出结果如图所示,它将彩色风景图像采样成8×8的区域 。


带你认识Python图像量化处理及局部马赛克特效

文章插图
但上述代码存在一个问题,当图像的长度和宽度不能被采样区域整除时,输出图像的最右边和最下边的区域没有被采样处理 。这里推荐读者做个求余运算,将不能整除部门的区域也进行采样处理 。

带你认识Python图像量化处理及局部马赛克特效

文章插图
2.3 局部马赛克处理前面讲述的代码是对整幅图像进行采样处理,那么如何对图像的局部区域进行马赛克处理呢?下面的代码就实现了该功能 。当鼠标按下时,它能够给鼠标拖动的区域打上马赛克,并按下“s”键保存图像至本地 。
# -- coding:utf-8 --import cv2import numpy as npimport matplotlib.pyplot as plt#读取原始图像im = cv2.imread('people.png', 1)#设置鼠标左键开启en = False#鼠标事件def draw(event, x, y, flags, param): global en #鼠标左键按下开启en值 if event==cv2.EVENT_LBUTTONDOWN: en = True #鼠标左键按下并且移动elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_LBUTTONDOWN: #调用函数打马赛克 if en: drawMask(y,x) #鼠标左键弹起结束操作 elif event==cv2.EVENT_LBUTTONUP: en = False#图像局部采样操作 def drawMask(x, y, size=10): #size*size采样处理m = x / size * sizen = y / size * size print m, n #10*10区域设置为同一像素值 for i in range(size): for j in range(size): im[m+i][n+j] = im[m][n]#打开对话框cv2.namedWindow('image')#调用draw函数设置鼠标操作cv2.setMouseCallback('image', draw)#循环处理while(1):cv2.imshow('image', im) #按ESC键退出 if cv2.waitKey(10)&0xFF==27: break #按s键保存图片 elif cv2.waitKey(10)&0xFF==115:cv2.imwrite('sava.png', im)#退出窗口cv2.destroyAllWindows()其输出结果如图所示,它将人物的脸部进行马赛克处理 。

带你认识Python图像量化处理及局部马赛克特效

文章插图
 




推荐阅读