马赛克的原理:
将图像中选中区域的像素值用这个选中区域中的某一像素值或者随机值替换;
代码实现:
# -*- coding: utf-8 -*-
"""
Created on Sat Jan 19 15:33:42 2019
@author: Administrator
"""
import cv2 #引入openCV
import numpy as np
#import matplotlib.pyplot as plt
img = cv2.imread('1-test.jpg',0) #OpenCV读取一个图像(B,G,R格式)
(height,width) = img.shape #获取图像的长宽深(M*N*3)
cv2.namedWindow('src')
cv2.imshow('src',img)
cv2.waitKey(0)
#plt.imshow(img)
#plt.show()
def mosaic(selected_image,nsize=9):
rows,cols= selected_image.shape
dist = selected_image.copy()
# 划分小方块,每个小方块填充随机颜色
for y in range(0,rows,nsize):
for x in range(0,cols,nsize):
dist[y:y+nsize,x:x+nsize] = (np.random.randint(0,255))
return dist
roiImg = img[20:150,170:350]#我们使用numpy中的数组切片的方式m截取载入图片上的部分,
result = mosaic(roiImg)
img[20:150,170:350] = result# 然后,将截取的这部分ROI区域的图片保存在roiImg矩阵变量中
cv2.imshow('src',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:
(a)原图
(b)灰度图
(c)结果图