OpenCV+python3 入门之图像马赛克和毛玻璃效果

**

OpenCV入门之图像马赛克和毛玻璃效果

**
图片的马赛克效果就是用图片的某个区域中指定的一个像素点来代替该区域中其他的像素点,毛玻璃效果就是用图片的某个区域中随机的一个像素点来代替该区域中其他的像素点。
原图如下:
OpenCV+python3 入门之图像马赛克和毛玻璃效果_第1张图片
一、图片的马赛克效果
马赛克是一个非常我们非常熟悉的图片效果,实现这个效果首先选择要替换的像素区域,我定的区域是1010的,就是在1010的区域内,选择指定的一个像素来替代其余的99个像素点,代码如下:

import cv2

img = cv2.imread("image0.jpg", 1)
height, width, deep = img.shape
mm = 10 # 选择替代的小区域
for i in range(100, 300):
    for j in range(100, 200): # 选择打码的区域
        if i%mm == 0 and j%mm == 0:
            (b, g, r) = img[i, j]
            for n in range(0,mm):
                for m in range(0,mm):
                    img[n+i, m+j] = (b, g, r)
cv2.imshow('dst', img)
cv2.waitKey(0)

执行结果如下:
OpenCV+python3 入门之图像马赛克和毛玻璃效果_第2张图片
可看到图片的左上方已经成功被打上熟悉的马赛克效果了。
二、图片的毛玻璃效果
和马赛克效果类似,图片的毛玻璃效果首先也要选择要替换的像素区域,我选择了88的区域,也就是在88的内随机选择一个像素点来替代其他63个像素点,这里我们给整个图片添加毛玻璃效果,具体代码如下:

import cv2
import numpy as np
import random

img = cv2.imread('image0.jpg', 1)
height, width, deep = img.shape
dst = np.zeros((height, width, deep), np.uint8)
mm = 8
for i in range(0, height-mm):
    for j in range(0, width-mm):
        index = int(random.random()*8) # 生成一个0-1之间的随机数
        (b, g, r) = img[i+index, j+index]
        dst[i, j] = (b,g,r)
cv2.imshow("dst", dst)
cv2.waitKey(0)

执行效果如下:

这里我们会发现毛玻璃效果的图片右边和下边都有黑边,是因为我们在替换像素的时候为了防止越界所以将宽和高都缩进了8

你可能感兴趣的:(OpenCV初学)