opencv 实现图像局部马赛克的交互式程序

# -- coding:utf-8 --
import cv2 as cv  
import numpy as np  
import matplotlib.pyplot as plt

#读取原始图像
im = cv.imread('d:/paojie.png')

#设置鼠标左键开启
en = False

#鼠标事件
def draw(event, x, y, flags, param):
    global en
    #鼠标左键按下开启en值
    if event==cv.EVENT_LBUTTONDOWN:
        en = True
    #鼠标左键按下并且移动
    elif event==cv.EVENT_MOUSEMOVE and flags==cv.EVENT_LBUTTONDOWN:
        #调用函数打马赛克
        if en:
            drawMask(y,x)
        #鼠标左键弹起结束操作
        elif event==cv.EVENT_LBUTTONUP:
            en = False
          
#图像局部采样操作         
def drawMask(x, y, size=20):
    #size*size采样处理
    m = x / size * size  
    n = y / size * size
    print(m, n)
    m = int(m)
    n = int(n)
    #10*10区域设置为同一像素值
    for i in range(size):
        for j in range(size):
            im[m+i][n+j] = im[m][n]

#打开对话框
cv.namedWindow('image')

#调用draw函数设置鼠标操作
cv.setMouseCallback('image', draw)

#循环处理
while(1):
    cv.imshow('image', im)
    #按ESC键退出
    if cv.waitKey(10)&0xFF==27:
        break
    #按s键保存图片
    elif cv.waitKey(10)&0xFF==115:
        cv.imwrite('sava.png', im)

#退出窗口
cv.destroyAllWindows()
程序运行过程中添加简单马赛克

你可能感兴趣的:(opencv 实现图像局部马赛克的交互式程序)