图像马赛克算法和毛玻璃算法

前言

手动实现马赛克和毛玻璃效果,原图片如下:
图像马赛克算法和毛玻璃算法_第1张图片

马赛克效果

import cv2
import numpy as np

img = cv2.imread('image0.jpg', 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]

# 在height 50 - 100 width 100 - 200 上 打码
# 在 10 * 10 的方格内,选取一个像素,进行填充
k = 0
for m in range(100, 200):
    for n in range(100,250):
        if m%10 == 0 and n%10 == 0:
            for i in range(10):
                for j in range(10):
                    (b, g, r) = img[m, n]
                    img[i + m, j + n] = (b, g, r)

cv2.imshow('image', img)
cv2.waitKey(0)

在图片中的某一块区域,打上马赛克,马赛克的算法就是在N个小块儿区域内(比如有很多个10 * 10小块儿),使用一个随机的像素值,代替其他像素值.效果如下:
图像马赛克算法和毛玻璃算法_第2张图片

毛玻璃效果

import cv2
import numpy as np
import random

img = cv2.imread('image0.jpg', 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]

dst = np.zeros([height, width, 3], np.uint8)

mm = 8
for m in range(height - mm):
    for n in range(width - mm):
        index = int(random.random() * 8)
        (b, g, r) = img[m+index, n+index]
        dst[m, n] = (b, g, r)

cv2.imshow('image', dst)
cv2.waitKey(0)

毛玻璃的算法和马赛克的算法有异曲同工之妙.毛玻璃是通过在某一个区域内随机选择一个像素点,用来代替当前像素点的做法,实现一个类似毛玻璃的效果.效果图如下:
图像马赛克算法和毛玻璃算法_第3张图片

你可能感兴趣的:(opencv)