本文主要是介绍用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*sizeprint(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码为27if cv2.waitKey(10)&0xFF==27:break#按a键保存elif cv2.waitKey(10)&0xFF==65:cv2.imwrite('save1232131123.jpg',hgs)
#退出窗口
cv2.destroyAllWindows()
照片原图:
经过马赛克之后的图像显示:
这篇关于用opencv对图像指定部位进行马赛克操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!