教你用鼠标画圈圈打马赛克

举报
hairuo 发表于 2020/07/22 19:57:22 2020/07/22
【摘要】 因为我每次想打码或者框住图片某些部分的内容时,总会不知所措,找不到一款方便作标记的看图软件,然而放到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协议

原文链接:https://www.huolaoye.cn/archives/660/

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。