【图像处理】马赛克

本文介绍了如何使用Python的OpenCV库手动创建马赛克效果。方法包括设置指定大小的像素块使区域内像素值相同,以及通过缩放和最近邻插值法实现类似效果。两种方法均能调整马赛克的粒度,影响最终的视觉效果。
摘要由CSDN通过智能技术生成

如何给一张图片打上马赛克呢?

马赛克原理

图像的马赛克效果是通过设置指定大小的像素块,并让这个像素块中的所有像素点设置为统一值来实现的。

方法一 手动制作马赛克

原理:这个过程有点像卷积的过程,如让这个像素块是10*10, 那么相当于卷积的步长strides=(10, 10),每次选取这个像素块左上角(当然可以是其他的任意点),让这个区域中的100个点和这个点的像素点都相同,便能实现马赛克的功能。

import cv2

def mosaic1(image, region=10):
    h, w, _ = image.shape
    for m in range(h - region):
        for n in range(w - region):
            # pixel ->10*10
            if m % region == 0 and n % region == 0:
                for i in range(0, region):
                    for j in range(0, region):
                        b, g, r = image[m, n]
                        image[i + m, j + n] = b, g, r
    cv2.imshow('mosaic', image)
    cv2.waitKey(0)

if __name__ == '__main__':
    img = cv2.imread('lenna.png', 1)
    mosaic1(img)

效果

原图
请添加图片描述

马赛克图
在这里插入图片描述
可以调整region的大小来设置马赛克的粒度,当然如果region=1的时候其实就是没有马赛克效果。

方法二 先缩小再放大产生马赛克

原理:先将图片缩小,然后放大,便形成了将一个像素块设置成相同像素值一样的效果,但是此处最好采用最近邻插值法放大图片,如果用双线性插值变会形成平滑的效果,相当于仅仅是模糊的效果,并没有形成成块状的马赛克效果。

resize()参数

import cv2

def mosaic2(image, step=10, interpolation=0):
    h, w, _ = image.shape
    image2 = cv2.resize(image, (w // step, h // step))
    image3 = cv2.resize(image2, (w, h), interpolation=interpolation)
    cv2.imshow('mosaic', image3)
    cv2.waitKey(0)

if __name__ == '__main__':
	img = cv2.imread('lenna.png', 1)
	mosaic2(img)

马赛克图
在这里插入图片描述

可以看到和第一种效果基本一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值