用opencv对图像指定部位进行马赛克操作

'''如何利用opencv对图片进行局域化马赛克处理'''
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图像
hgs=cv2.imread('lbxx.jpg',1)
#设置单机鼠标开启
en=False
#鼠标事件
def draw(event,x,y,flags,param):
    #全局变量
    global  en
    #单机鼠标开启en值
    if event==cv2.EVENT_LBUTTONDOWN:
        en=True
        #单机鼠标并且移动
    elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_LBUTTONDOWN:
        #调用函数打马赛克
        if en:
            drawHHH(y,x)
            #单击鼠标弹起结束操作
        elif event==cv2.EVENT_LBUTTONUP:
            en=False
#定义图像局部采样操作,可以通过修改size的数值使自己局部马赛克的范围变大
def drawHHH(x,y,size=50):
    #size*size采样处理
    m=x/size*size
    #为了防止有浮点数,将这个变成整数类型的
    m=int(m)
    n=y/size*size
    print(m,n)
    n=int(n)
    #10*10区域设置为同一像素值
    for i in range(size):
        for j in range(size):
            hgs[m+i][n+j]=hgs[m][n]
#打开对话框
cv2.namedWindow('image')
#调用draw函数设置鼠标操作
cv2.setMouseCallback('image',draw)
#循环处理
while(1):
    cv2.imshow('image',hgs)
    #按esc键退出,ASCII码为27
    if cv2.waitKey(10)&0xFF==27:
        break
    #按a键保存
    elif cv2.waitKey(10)&0xFF==65:
        cv2.imwrite('save1232131123.jpg',hgs)
#退出窗口
cv2.destroyAllWindows()

照片原图:

用opencv对图像指定部位进行马赛克操作_第1张图片

 经过马赛克之后的图像显示:

用opencv对图像指定部位进行马赛克操作_第2张图片

 

你可能感兴趣的:(Opencv图像处理,python,opencv)