原理介绍:利用resize()将图片先缩小,再放大
代码示例:
import cv2
import numpy as np
if __name__ =='__main__':
img=cv2.imread('D:\\26059\\Desktop\\20220630_python_learning\\CSDN_opencv_learning\\4.jpg')
print(img.shape)#打印图片长宽
cv2.namedWindow("image",cv2.WINDOW_NORMAL)#自由改变显示框大小
img2=cv2.resize(img,(49,35))
img3=cv2.resize(img2,(490,350))
cv2.imshow('image',img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
问题分析:使图像变的模糊,并没有达到马赛克的真正效果
解决方案:如果是想对图片进行马赛克处理,不太建议这种方法
原理介绍:1.先使用resize()将图片缩小按照一定比例缩小,原图像素为490*350,如下图代码示例cv2.resize(img,(49,35))即是将图像缩小十倍。
2.接着使用repeat(),分别将图像的横轴和竖轴放大N倍,(图中为10倍)
代码示例:
import cv2
import numpy as np
img=cv2.imread('D:\\26059\\Desktop\\20220630_python_learning\\CSDN_opencv_learning\\7.png')
cv2.namedWindow("image",cv2.WINDOW_NORMAL)#自由改变显示框大小
img2=cv2.resize(img,(49,35))
img3=np.repeat(img2,10,axis=0)
img4=np.repeat(img3,10,axis=1)
cv2.imshow("image",img3)
cv2.imwrite("image.png",img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
问题分析:相较于方法一的图像简单模糊处理,方法二能够较好的实现图像的马赛克处理,在利用repeat()对图像进行横轴与数轴放大时,通过调整N的数值大小,也能够较好的实现马赛克程度的调整。
此方式的问题在于,无法确定像素的选取,即无法确定是对某一块像素颜色进行加权处理,还是随机选取,或者采用其他方式。
解决方法:针对上述的问题,我所想到的解决方法是先对整个图像进行遍历,选取出一定像素颜色范围,对该范围利用上述方法进行处理。
原理介绍:利用切片,每隔n个取一个像素点,剥离了图像的细节
代码示例:
import cv2
import numpy as np
if __name__ =='__main__':
img=cv2.imread('D:\\26059\\Desktop\\20220630_python_learning\\CSDN_opencv_learning\\4.jpg')
print(img.shape)#打印图片长宽
cv2.namedWindow("image",cv2.WINDOW_NORMAL)#自由改变显示框大小
img2=img[::15,::15]
cv2.imshow('image',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
问题分析:上述图像中,图一的n值取15,图二的n值取50,通过对比,可以很明显的发现,图二的信息缺失更多,通过改变N值,也能够很好的实现图像马赛克程度的变化。
此种方法的问题在于,每n个像素取一个限制了像素选取的自由度。