利用opencv实现图像马赛克处理的三种方法

利用opencv实现图像马赛克处理的三种方法

前言:本文就图像的马赛克处理,基于opencv提出了三种解决方案,并详细地介绍了三种方法的原理、示例、问题及问题的解决方案。

方法一

原理介绍:利用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个像素取一个限制了像素选取的自由度。

相关推荐

OPPO Find X3 产品参数
365bet网络足球赌博

OPPO Find X3 产品参数

📅 07-07 👁️ 8695
香港苹果4s(香港苹果4s全网购买攻略——价位、型号、质量等细节解析)
村民 (Villager) - [MC]我的世界原版 (Minecraft) - MC百科
正版约彩365软件

村民 (Villager) - [MC]我的世界原版 (Minecraft) - MC百科

📅 07-08 👁️ 7521