教你用鼠标画圈圈打马赛克
【摘要】 因为我每次想打码或者框住图片某些部分的内容时,总会不知所措,找不到一款方便作标记的看图软件,然而放到GNU(GNU是linux平台的一款类PS软件)里处理的话又太浪费时间。所以写了下面的代码,用opencv实现这两种效果。
前言:
刚刚登陆了下账号,发现云专家认证通过了,有点小窃喜。我点开自己头像看到,就一篇关于modelarts的文章。jio得跟其他用户比起来挺少的,所以搬运下我自己博客的文章,先凑凑数。hhh
发布文章后超链接不跳转?
正文:
编写脚本的缘由:
因为我每次想打码或者框住图片某些部分的内容时,总会不知所措,找不到一款方便作标记的看图软件,然而放到GNU(GNU是linux平台的一款类PS软件)里处理的话又太浪费时间。所以写了下面的代码,用opencv实现这两种效果。
使用方法:
默认画马赛克,按1-2秒k键画圈圈,按1-2秒m键画马赛克。
PS:这里默认读者在自己电脑上已经安装好opencv了,下边是代码,有需要的读者复制粘贴即可。
代码实现:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed May 13 20:10:13 2020 @author: hairuo """ import cv2 as cv #读取原始图像 img = cv.imread('./结业证书.jpg') #设置鼠标左键开启 drawing = False #按下k表示画框框,按m表示画马赛克 mode = False #鼠标事件 def draw(event, x, y, flags, param): global drawing,mode #鼠标左键按下开启en值 if event==cv.EVENT_LBUTTONDOWN: drawing = True #鼠标左键按下并且移动 elif event==cv.EVENT_MOUSEMOVE and flags==cv.EVENT_LBUTTONDOWN: #调用函数打马赛克 if drawing: if mode is False: draw_mosaic(y,x) else: cv.circle(img, (x, y), 3, (0,0,255), 3) #鼠标左键弹起结束操作 elif event==cv.EVENT_LBUTTONUP: drawing = False #图像局部采样操作 def draw_mosaic(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): img[m+i][n+j] = img[m][n] #打开对话框 cv.namedWindow('image') #调用draw函数设置鼠标操作 cv.setMouseCallback('image', draw) #循环处理 while(1): cv.imshow('image', img) #按ESC键退出 if cv.waitKey(10)&0xFF==107: mode = True #按m键画马赛克 elif cv.waitKey(10)&0xFF==109: mode = False #按s键保存图片 elif cv.waitKey(10)&0xFF==115: cv.imwrite('sava.png', img) elif cv.waitKey(10)&0xFF==27: break #退出窗口 cv.destroyAllWindows()
演示效果:
废话不多说,直接上图,立见成效:
注意:
本文内容来自我的个人博客网站,未经笔者允许,读者不得转载本文以作他用,本博客遵循CC BY-NC-SA 4.0协议。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)