1 说明:

=====

1.1 因各种需要,给图片打马赛克,当然本人着重介绍python用cv2的方法,主要讲解python和cv2的相关编程知识。

1.2 cv2模块:是OpenCV的python调用模块,本人有初步介绍,此处省略,可以看下面文章的链接:

https://www.toutiao.com/i6833713845005976067/

1.3 使用图片来源,下图,来源今日头条图库。

2 方法一,指定区域打马赛克:

======================

2.1 如何选定需要打马赛克的区域,即获取左上顶点的坐标x和y,还有马赛克宽和高:

2.2 先采用基本法zhao.py显示图片,代码:

#导入模块import cv2   #读取图像,指定路径和文件夹img = cv2.imread("/home/xgj/Desktop/OpenCV/kiss.jpeg")   #窗口标题名和挂在读取图片img显示cv2.imshow("Show Your Image", img)   #不支持中文标题名#默认为0,空值就是0,如果是非0,则就是动画,一张图没效果#cv2.waitKey (0)  cv2.waitKey () cv2.destroyAllWindows()

2.3 用上面显示图片法,找坐标,如下图:

2.4 记下需要马赛克区域的x和y坐标:

即左上顶点x和y是500,300

右下角x和y是600,450

所以得到:

#左上顶点坐标500,300(x,y),右下坐标600,450(x,y)#所以需要马赛克宽100,高150do_mosaic(im, 500, 300, 100, 150)   #指定马赛克区域

2.5 mosaic1.py完整代码:

#导出模块import cv2#自定义函数def do_mosaic(frame, x, y, w, h, neighbor=9):    """    :param frame: opencv frame    :param int x :  马赛克左顶点    :param int y:  马赛克右顶点    :param int w:  马赛克宽    :param int h:  马赛克高    :param int neighbor:  马赛克每一块的宽    """    #获取这张图片的h和w,并赋值给fh和fw    fh, fw = frame.shape[0], frame.shape[1]    #判断如果超过返回    if (y + h > fh) or (x + w > fw):        return    for i in range(0, h - neighbor, neighbor):  # 关键点0 减去neightbour 防止溢出        for j in range(0, w - neighbor, neighbor):            rect = [j + x, i + y, neighbor, neighbor]            color = frame[i + y][j + x].tolist()  # 关键点1 tolist            left_up = (rect[0], rect[1])            right_down = (rect[0] + neighbor - 1, rect[1] + neighbor - 1)  # 关键点2 减去一个像素            cv2.rectangle(frame, left_up, right_down, color, -1)#读取本地图片,1代表原色就是彩色im = cv2.imread('/home/xgj/Desktop/OpenCV/kiss.jpeg', 1)#左上顶点坐标500,300(x,y),右下坐标600,450(x,y)#所以需要马赛克宽100,高150do_mosaic(im, 500, 300, 100, 150)   #指定马赛克区域while 1:    k = cv2.waitKey(10)    if k == 27:#这是一个退出设置,27代表按esc按键        break    cv2.imshow('mosaic', im)#保存生成的mosaic的图片cv2.imwrite('/home/xgj/Desktop/OpenCV/kissmosaic.jpeg', im)

2.6 效果图

3 方法二:鼠标选定打马赛克法:

========================

3.1 mosaic2.py代码:

#coding:utf-8import cv2import numpy as np#定义初始化point_start = {'x':0,'y':0}point_end = {'x':0,'y':0}rows = 0cols = 0point_lft=0point_rgt=0selected = False#定义马赛克效果函数def mosaic(selected_image,nsize=9):    rows,cols,_ = selected_image.shape    dist = selected_image.copy()    # 划分小方块,每个小方块填充随机颜色    for y in range(0,rows,nsize):        for x in range(0,cols,nsize):            dist[y:y+nsize,x:x+nsize] = (np.random.randint(0,255),np.random.randint(0,255),np.random.randint(0,255))    return dist#定义鼠标操作,选定操作,注意点击按住鼠标左键,往下拖def mouse_handler(event,x,y,flag,params):    global point_lft,point_rgt,selected    if event == cv2.EVENT_LBUTTONDOWN:        print('button down')        point_start['x'] = x        point_start['y'] = y    if event == cv2.EVENT_LBUTTONUP:        print('button up')        point_end['x'] = x        point_end['y'] = y        selected = True#导入原图  src = cv2.imread('/home/xgj/Desktop/OpenCV/kiss.jpeg')#获取原图大小和像素rows,cols,_ = src.shapesrc_cpy = src.copy()#显示原图cv2.namedWindow("src")#在原图上调用鼠标操作cv2.setMouseCallback("src",mouse_handler)#如果鼠标没有选定while not selected:    cv2.imshow('src',src)    key = cv2.waitKey(10)# 处理选择的矩形rect = {}if point_start['x'] < point_end['x']:    rect['x'] = point_start['x']    rect['y'] = point_start['y']    rect['width'] = np.abs(point_end['x'] - point_start['x'])    rect['height'] = np.abs(point_end['y'] - point_start['y'])    cv2.rectangle(src,(point_start['x'],point_start['y']),(point_end['x'],point_end['y']),(255,0,0),3)else:    rect['x'] = point_end['x']    rect['y'] = point_end['y']    rect['width'] = np.abs(point_end['x'] - point_start['x'])    rect['height'] = np.abs(point_end['y'] - point_start['y'])    cv2.rectangle(src,(point_end['x'],point_end['y']),(point_start['x'],point_start['y']),(255,0,0),3)cv2.imshow('src',src)print('selected rect = ',rect)# 选择图像select_image = src_cpy[rect['y']:rect['y']+rect['height'],                    rect['x']:rect['x']+rect['height']]result = mosaic(select_image)# 将处理完成的区域合并回原图像src_cpy[rect['y']:rect['y']+rect['height'],        rect['x']:rect['x']+rect['height']] = cv2.addWeighted(result,0.65,select_image,0.35,2.0)#显示马赛克效果的图片cv2.imshow('result',src_cpy)#保存已经生成马赛克效果的图片和位置cv2.imwrite('/home/xgj/Desktop/OpenCV/kissmosaic2.jpeg', src_cpy)cv2.waitKey()cv2.destroyAllWindows()

3.2 效果图

自己整理并分享出来,喜欢的就点赞、转发和收藏。

layui图片src 指定后没显示_2种方法用python调用cv2模块给图片打马赛克相关推荐

  1. cv2 python 多线程调用摄像头_2种方法用python调用cv2模块给图片打马赛克

    1 说明: ===== 1.1 因各种需要,给图片打马赛克,当然本人着重介绍python用cv2的方法,主要讲解python和cv2的相关编程知识. 1.2 cv2模块:是OpenCV的python调 ...

  2. win11系统点开图片几秒后就显示“此处没有任何要显示的内容

    问题现象:win11系统点开图片几秒后就显示"此处没有任何要显示的内容 问题解决:来自微软件官网 建议执行一下干净启动,排除其他干扰: https://support.microsoft.c ...

  3. ArcEngine中shp中先加入要素然后删除一部分要素后,放大图形后不显示的问题解决方法...

    ArcEngine中shp中先加入要素然后删除一部分要素后,放大图形后不显示的问题解决方法 (一)问题描述如下: shp中先加入要素然后删除一部分要素后,图形为什么显示不正常了 //--------- ...

  4. 电脑无鼠标修复计算机怎么办,电脑屏幕只有鼠标箭头怎么解决_电脑开机后只显示鼠标修复方法...

    现阶段,大部分人群都开始使用上电脑了,可是对于电脑中出现的一些故障,可能有些用户就不知道该怎么解决了,例如有的用户在启动完电脑之后,只有鼠标显示出来,这让许多用户都感到很疑惑,那么电脑屏幕只有鼠标箭头 ...

  5. 【应用】Python调用百度AI实现图片上表格识别

    [应用]Python调用百度AI实现图片上表格识别 简介 步骤 安装百度AI库 注册百度AI开放平台 调用AipOcr库识别表格文字 可能遇到的问题 批量操作 简介 Python免费调用百度AI实现图 ...

  6. python图片保存_python读取和保存图片5种方法对比

    python读取和保存图片5种方法对比 python中对象之间的赋值是按引用传递的,如果需要拷贝对象,需要用到标准库中的copy模块 方法一:利用 PIL 中的 Image 函数 这个函数读取出来不是 ...

  7. Python——调用百度AI实现图片上文字识别

    Python--调用百度AI实现图片上文字识别 简介 步骤 安装百度AI库 注册百度AI开放平台 调用glob库 调用AipOcr库识别文字 可能会遇到的问题 批量操作 简介 Python免费调用百度 ...

  8. mysql如何上传照片_MySQL数据库之图片上传存储数据库的2种方法讲解(Mysql)

    本文主要向大家介绍了MySQL数据库之图片上传存储数据库的2种方法讲解(Mysql) ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 数据库Mysql存储,读取图片 在项目中,很 ...

  9. 数据绑定(三)为Binding指定绑定源的几种方法

    原文:数据绑定(三)为Binding指定绑定源的几种方法 Binding的源是数据的来源,所以,只要一个对象包含数据并能通过属性把数据暴露出来,它就能当作Binding的源来使用,常用的办法有: 一. ...

最新文章

  1. hpuoj--1093: 回文数(一)
  2. linux函数进程撤销,Linux进程控制函数
  3. centos改变文件拥有者_每天学点之CentOS软件二进制包安装
  4. 消费滚动滴log日志文件(flume监听,kafka消费,zookeeper协同)
  5. 如何把微信公众号平台做成找券机器人并自动回复优惠券
  6. 如何使用Python itchat库玩转微信, 统计好友信息, 设置自动回复和发送本地文件...
  7. 《霜冷长河》之《壮士》----英雄归来
  8. RabbitMQ深入学习指导
  9. Python地理做图——学习笔记
  10. 关于MD服装大师制作后导入到SP中的设置相关问题
  11. D. Very Suspicious(数学 + 二分查找)
  12. 《陈二狗妖孽人生》之经典语录
  13. swing界面设计之登录注册界面
  14. ios 自动打包命令_iOS:使用jenkins实现xcode自动打包(最新)
  15. 太空飞行计划问题 网络流24题(2/24)
  16. 大量打印怎么省钱,数量多怎么打印便宜
  17. “贵系万花筒”:探秘清华计算机系背后的“酒井”文化
  18. Springboot毕设项目地铁站自动售票系统77x9w(java+VUE+Mybatis+Maven+Mysql)
  19. 【成为博客专家】大数据面试题
  20. 将MacBook作为无线路由器

热门文章

  1. 三种插入排序算法:直接插入排序、折半插入排序、希尔插入排序
  2. 1132 Cut Integer (20 分)【难度: 简单 / 知识点: 模拟】
  3. 华为nova5ipro的优缺点_华为nova5pro和nova5i的区别
  4. 重磅:某国产操作系统发布,称完全可替代Windows 7,由华为牵头制作!
  5. 禁止套娃!Redis官网宕机,返回“连接不上Redis”
  6. 线上问题分析系列:数据库连接池内存泄漏问题的分析和解决方案
  7. 懒人 IDEA 插件推荐: EasyCode 一键帮你生成所需代码~
  8. 2020 年 4 月全国程序员工资新鲜出炉,我拖后腿了!
  9. 蓝桥杯java第三届决赛第一题--星期日
  10. 2021-10-15 红黑树 概念和平衡操作理解以及与AVL对比分析 恋上数据结构笔记