cv2 python 多线程调用摄像头_2种方法用python调用cv2模块给图片打马赛克
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 效果图
自己整理并分享出来,喜欢的就点赞、转发和收藏。
cv2 python 多线程调用摄像头_2种方法用python调用cv2模块给图片打马赛克相关推荐
- python使用方法视频-Python读取视频的两种方法(imageio和cv2)
用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...
- layui图片src 指定后没显示_2种方法用python调用cv2模块给图片打马赛克
1 说明: ===== 1.1 因各种需要,给图片打马赛克,当然本人着重介绍python用cv2的方法,主要讲解python和cv2的相关编程知识. 1.2 cv2模块:是OpenCV的python调 ...
- python怎么导入视频-Python读取视频的两种方法(imageio和cv2)
用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...
- python向上取整的方法_python 取整的两种方法,python向上取整的方法,问题简介: 要把一...
python 取整的两种方法,python向上取整的方法,问题简介: 要把一 问题简介: 要把一个浮点数(float)整数部分提取出来.比如把"2.1"变成"2" ...
- python 字符串转函数名_Python 使用函数名(字符串)调用函数(4种方法)
先看一个例子: >>> def foo(): print("foo") >>> def bar(): print("bar" ...
- python截图黑屏_对Python获取屏幕截图的4种方法详解
Python获取电脑截图有多种方式,具体如下: PIL中的ImageGrab模块 windows API PyQt pyautogui PIL中的ImageGrab模块 import time imp ...
- WPF多线程UI更新——两种方法
WPF多线程UI更新--两种方法 前言 在WPF中,在使用多线程在后台进行计算限制的异步操作的时候,如果在后台线程中对UI进行了修改,则会出现一个错误:(调用线程无法访问此对象,因为另一个线程拥有该对 ...
- Python 数据降噪处理的四种方法——均值滤波、小波变换、奇异值分解、改变binSize
Python 数据降噪处理的四种方法--均值滤波.小波变换.奇异值分解.改变binSize github主页:https://github.com/Taot-chen 一.均值滤波 1)算法思想 给定 ...
- 【Qt】Qt多线程开发—实现多线程设计的四种方法
Qt-使用Qt实现多线程设计的四种方法 文章目录 Qt-使用Qt实现多线程设计的四种方法 一.写在前面 二.[方法一] QThread:带有可选事件循环的底层API 三.[方法二] QThreadPo ...
最新文章
- QCopChannel的用法
- 转盘抽奖(主要:概率和JQ)
- JGroups:无需额外基础架构的领导人选举
- python 递归函数例子_python函数递归的几个例子
- rabbitmq direct 多个消费者_RabbitMQ从零开始
- 关于cmd如何进出文件夹
- 企业全面运营管理沙盘模拟心得_大庆职业学院举办创业技能大赛企业经营管理沙盘模拟赛...
- vb 字符串和数字相互转换函数
- MATLAB--二分法
- 怎么把英文字幕翻译成中文?快把这些方法收好
- matlab求解非线性方程数值解,[转载]MATLAB求解非线性方程(转)
- 关于win10微软商店打不开的99%解决办法
- 迪赛智慧数——其他图表(平行坐标图):2001 VS 2020主要城市房价及涨幅
- MySQL 完全备份 + 增量备份+完全恢复
- matlab经纬度画轨迹图_MATLAB将经纬度坐标转换成直角坐标
- Android学习 - Material Design设计规范
- uploadify多个文件上传,提示超过最多限制
- 什么是超大规模数据中心?它们是如何工作的?
- 音频编解码基础知识(一)
- 算法——股票买卖问题
热门文章
- favicon.ico在ie下面不显示的解决方法
- 解决IntelliJ IDEA 创建Maven项目速度慢问题 DarchetypeCatalog
- Android Fragment手柄后退按钮按下[重复]
- php cookie防伪造,技术分享:Cookie 防伪造 防修改
- get,post网络请求
- java windows wrapper_Java Service Wrapper 发布Java程序为Windows服务
- caged系统pdf_热电材料的应用和研究进展.pdf
- centos7火狐浏览器上不了网_网络问题备忘:能ping通,就是上不了网
- 普通话测试第四题评分标准_2017年普通话考试-评分细则
- vue中watch监听路由传来的参数变化