python使用opencv_玩转Python图片处理 (OpenCV-Python )
1 import cv2 #导入opencv库
2 importnumpy as np3
4 #.........................................................................
5 #读取一张图片,地址不能带中文
6 '''
7 第二个参数,取值可为:8 cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道9 cv2.IMREAD_GRAYSCALE:读入灰度图片10 cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道(png有,jpg无)11 '''
12 #imgviewx=cv2.imread("imgx/wa.jpg")
13 imgviewx=cv2.imread("imgx/DONG.jpg",cv2.IMREAD_COLOR)14
15 #.........................................................................
16 #获取图片信息
17 #一个像素有三个通道,BGR
18 print(imgviewx.shape)#输出:(1080, 1920, 3) 高像素,宽像素,通道数
19 print(imgviewx.size)#120000 总通道数=高* 宽* 通道数
20 print(imgviewx.dtype)#uint8 3个通道每个通道占的位数(8位,一个字节)
21 #print(imgviewx) #输出效果视乎与下条相同
22 #print(np.array(imgviewx)) #输出每个像素点的参数( B , G , R )
23 #获取图片 B G R 各均值, #(204.46305102040816, 208.50832244897958, 217.29540408163263, 0.0) ,红色部分最多
24 print(cv2.mean(imgviewx))25 #获取方差,也会打印均值,可用均值方差都为零判断图片无效
26 #print(cv2.meanStdDev(imgviewx))
27
28
29
30 #.........................................................................
31 #图片处理
32 #备份图片
33 imgviewx1=imgviewx.copy()34
35 #均值模糊,主要用于去除图片噪点
36 #读取图片并实现图片的模糊效果,参数:(读取图片,(X轴方向模糊,Y轴方向模糊))
37 #imgviewx=cv2.blur(imgviewx,(5,5))
38
39 #中值模糊,主要用于去除椒盐(烧烤配料)噪点
40 #参数:(图片信息,模糊值)
41 #imgviewx=cv2.medianBlur(imgviewx,9)
42
43 #普通高斯模糊
44 #参数:(图片信息,参数1,参数2)参数1和参数2只能设置一个
45 #imgviewx=cv2.GaussianBlur(imgviewx,(0,0),1)
46
47 #保留边缘(像素差),高斯模糊
48 #参数(图片信息,0,要用怎样的方式(越大则越细),空间复杂度(越大越复杂))
49 imgviewx=cv2.bilateralFilter(imgviewx,0,50,6)50
51
52 #美颜,美白效果valuex值越大越白
53 #valuex=50;
54 #imgviewx=cv2.bilateralFilter(cv2.imread("imgx/zcy.jpg"),valuex,valuex * 2,valuex / 2)
55
56 #对比度和亮度调整
57 #duix=0.5 #对比度
58 #lightx=0 #亮度
59 #imgviewx=cv2.addWeighted(imgviewx,duix,np.zeros(imgviewx.shape,imgviewx.dtype),1-duix,lightx)
60
61
62
63 #显示文字
64 #参数:图像,文字内容, 坐标( x , y ) ,字体,大小,颜色( B , G ,R ),字体厚度
65 #颜色值为0-255
66 font = cv2.FONT_HERSHEY_SIMPLEX #定义字体
67 imgviewx = cv2.putText(imgviewx,"DONG XIAO DONG",(10, 50), font, 1.2, (0, 0, 255), 5)68
69
70 #像素取反
71 #imgviewx=cv2.bitwise_not(imgviewx)
72
73
74
75 #遍历图片,效率低,不推荐使用
76 defxgtp():77 globalimgviewx78 gx,kx,tx=imgviewx.shape#得到像素高度,像素宽度,通道数
79
80 for g inrange(0,gx):81 for k in range(0,kx): #这里得到的是每个像素点,每个点由RGB三色构成
82 if(k>0 and k<100):83 imgviewx[g,k,0]=0 #B
84 imgviewx[g,k,1]=255 #G
85 imgviewx[g,k,2]=255 #R
86 else:87 imgviewx[g, k, 0] = imgviewx[g, k, 0] #获取到原来的值
88 imgviewx[g, k, 1] = imgviewx[g, k, 1]89 imgviewx[g, k, 2] = imgviewx[g, k, 2]90
91 #创建一个图形,使用np,所以效率高
92 defcjtx():93 #初始化像素点值全为0 (rgb都为零,所以是黑色)
94 #参数:([高,宽,通道数],每个通道占的位数(一个字节))
95 imgx=np.zeros([400,600,3],np.uint8)96
97 #初始化像素点值为全为1
98 #imgx[110:130,50:70,2]表示一个范围:[高度起始点:高度结束点,宽度起始点:宽度结束点,哪个通道],起始点均以左上角
99 #imgx[:,:,0]=np.ones([400,600],np.uint8)*255 #最终结果为第一个通道(B)全为255,所以是蓝色
100 imgx[110:130,50:70,1]=np.ones([20,20],np.uint8)*255
101 cv2.imshow("第二个图形窗口",imgx)102
103 #图片区域处理
104 defpictureArea():105 globalimgviewx106 #得到截图
107 areax=imgviewx[110:529,778:1200]108 #将图片由RGB(3通道)转换为灰度(2通道)
109 areax=cv2.cvtColor(areax,cv2.COLOR_BGR2GRAY)110 #将图片有2通道还原成3通道,但色彩不能还原
111 areax2=cv2.cvtColor(areax,cv2.COLOR_GRAY2RGB)112 #处理后的区域写到原图上
113 imgviewx[110:529, 778:1200]=areax2114 #显示截图
115 cv2.imshow("area",areax)116
117 #泛洪填充,相似像素填充
118 deffill_color():119 globalimgviewx120 h,w,t=imgviewx.shape121 #必要参数
122 maskx=np.zeros([h+2,w+2],np.uint8)123 #参数接收:(图片信息,必要参数,参考点位置坐标,填充的颜色,查找范围:最低像素(参考减所写),查找范围:最高像素(参考加所写),全部填充)
124 cv2.floodFill(imgviewx,maskx,(100,100),(0,255,0),(100,100,100),(50,50,50),cv2.FLOODFILL_FIXED_RANGE)125
126
127
128 #通道分离与合并
129 deftongdao():130 globalimgviewx131 b,g,r=cv2.split(imgviewx)#通道分离
132 cv2.imshow("bb",b)#通道图单独显示
133 cv2.imshow("gg",g)134 cv2.imshow("rr",r)135
136 imgviewx[:,:,1]=135 #改变单个通道(0,1,2 => B,G,R)
137 cv2.imshow("chang red",imgviewx)138
139 imgviewx=cv2.merge([b,g,r])#合并通道
140
141 #像素运算
142 defpixel_operation():143 #读入两张大小和通道相同的图片
144 img1=cv2.imread("imgx/img1.jpg")145 img2=cv2.imread("imgx/img2.jpg")146 print(img1.shape, "=====", img2.shape)147 #创建一个大小可调整的窗口
148 cv2.namedWindow("operation", cv2.WINDOW_NORMAL)149 cv2.imshow("img111", img1)150 cv2.imshow("img222",img2)151 #处理图片
152 #像素点相加,如0(黑色),255(白色),0+255=255(白色),超过255还是白色
153 #imgoperation=cv2.add(img1,img2)
154 #像素相减,如0(黑色),255(白色),0-255=-255=0(黑色)
155 #imgoperation=cv2.subtract(img1,img2)
156 #像素相乘,255(白色),0/255=0(黑色)
157 #imgoperation=cv2.divide(img1,img2)
158 #像素相乘,255(白色),0*255=0(黑色)
159 #imgoperation=cv2.multiply(img2,img1)
160 #像素与,二进制与,如0与255为00000000&11111111=00000000
161 imgoperation=cv2.bitwise_and(img1,img2)162 #像素或
163 imgoperation=cv2.bitwise_or(img1,img2)164
165 #显示处理后的图片
166 cv2.imshow("operation", imgoperation)167
168
169
170 #.......................................................................
171 #视频处理,视频无声音
172 defvediox():173 ved=cv2.VideoCapture("imgx/vv.mp4")#打开视频
174 whileTrue:175 ret,tux=ved.read()176 if ret== False:#判断视频是否播放完毕
177 break
178 else:179 cv2.imshow("wideo1111",tux)#每帧显示
180 hsv=cv2.cvtColor(tux,cv2.COLOR_BGR2HSV)#转换成HSV图片格式,对颜色敏感
181 lowx=np.array([37,43,46])#表格在后面给出
182 uppx=np.array([77,255,255])183 #播放此输出的目标是白色
184 tux2=cv2.inRange(hsv,lowx,uppx)#利用低指和高指匹配延时,所匹配的是绿色
185 #播放此输出的目标是原色
186 tux3 = cv2.bitwise_and(tux,tux, mask=tux2)187
188 cv2.imshow("video222",tux3)189
190 if 27==cv2.waitKey(20):#按键退出播放
191 break
192
193
194 #.........................................................................
195 #创建一个窗口,中文显示会出乱码,第一个参数为窗口唯一标识字符串
196 #窗口大小可调整,默认参数为c v2.WINDOW_AUTOSIZE 根据图像大小自动创建大小
197 #可建多个
198 cv2.namedWindow("东小东标题",cv2.WINDOW_NORMAL)199
200
201 #.........................................................................
202 #创建鼠标点击事件回调函数,(事件,x轴位置,y轴位置,标记,属性)
203 defdrawxxx(event,x,y,flags,param):204 if event==cv2.EVENT_LBUTTONDOWN:205 print("鼠标按下",x,y)206 #elif event==cv2.EVENT_MOUSEMOVE:
207 #print("鼠标滑动")
208 elif event==cv2.EVENT_LBUTTONUP:209 print("鼠标抬起")210
211 #注册鼠标监听事件(窗口,回调函数)
212 cv2.setMouseCallback("东小东标题",drawxxx)213
214 #.........................................................................
215 t1=cv2.getTickCount()#利用cpu时间......
216 #xgtp()#调用图片像素遍历函数
217 #cjtx()#调用创建图形函数
218 #vediox()#调用视频处理函数
219 #tongdao()#通道处理
220 #pixel_operation()#像素点的加减乘除等处理
221 #pictureArea()#图片区域处理
222 #fill_color()#泛洪填充,相似像素填充
223 t2=cv2.getTickCount()224 timesx=(t2-t1)/cv2.getTickFrequency()225 print("花费时间:%s 毫秒"%(timesx*1000))226
227
228 #显示图片,参数:(窗口唯一标识字符串,imread读入的图像)
229 #可以不基于窗口,可建多个
230 cv2.imshow("东小东标题",imgviewx)231
232
233 #.........................................................................
234 #将图片保存,写入到文件
235 cv2.imwrite("2.jpg",imgviewx)236
237
238
239 #.........................................................................
240 #窗口退出
241 #窗口等待任意键盘按键输入,0为一直等待,其他数字为毫秒数
242 #等待时间到则返回-1,如有键盘按键按下则返回按键的ASCII码
243 #可使用print(cv2.waitKey(0))获取该按键值
244 keyx=cv2.waitKey(0)245 print(keyx)246 if keyx==27:247 print("你按下了键盘的:ESC键")248
249 #.........................................................................
250 #销毁窗口,退出程序
251 cv2.destroyAllWindows()
python使用opencv_玩转Python图片处理 (OpenCV-Python )相关推荐
- python动图自动识别_这种图片可以用Python自动识别吗()
python如何检测字典的键中是否含有某串字符? 1.说明 python测字典的键中是否含有某串字符,便利字典键值,再判符串是否在键值中即可. 2例代码: # 定义一个字典 dic = {'1984/ ...
- python小应用之整理手机图片_用Python这个小工具,一次性把论文作图与数据处理全部搞定!...
整理完这些资料已经凌晨3点了,困得眼睛都睁不开,一想到明天就截稿了,他只好随便拼凑一篇应付. 结果可想而知,导师还没看完第一页就把论文给退回来了,说论文通篇缺乏具体数据分析,研究计划就很粗糙,实施起来 ...
- python动态更新窗口上的图片_基于Python实现matplotlib中动态更新图片(交互式绘图)...
最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...
- python 爬网页 发布wordpress 包含图片_使用python批量插入wordpress-从理清表结构开始...
python or php建站? 说实话,php能看懂,写的话就再需要熟悉一下语法.python建站需要从头开始.包括模板.cms.都没有php下的wordpress多.插件上也是wordpress有 ...
- python 解压js压缩的图片_20行Python代码,无损压缩千百张图片!Python有多强!就不用说了...
每个设计师.摄影师或有图片处理需求小编,都会面临批量 高清大图的困扰. 因为高清大图放到网站上会严重拖慢加载速度,或是有的地方明确限制了图片大小,因此,为了完成工作,他们总是需要先把图片压缩,再上传. ...
- 用python爬虫爬取无水印图片_使用python 爬虫,爬取图片
一.需求: 用python实现去内涵段子里面下载网页当中的图片到本地当中 二.实现: 1.获取要爬取的URL地址 2.设置headers 3.请求网页内容,把html内容转换成XML 4.解析地址内容 ...
- python人脸识别opencv_手把手教你如何用 OpenCV + Python 实现人脸识别
必备知识 Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深, ...
- 用python画一个简单卡通人物图片_用python画一只可爱的皮卡丘实例
效果图 #!/usr/bin/env python # -*- coding:utf-8 -*- from turtle import * ''' 绘制皮卡丘头部 ''' def face(x,y): ...
- python高端玩法_这7种Python的全新玩法,一般人都不知道!
Python第三方模块众多,下面我介绍一些比较实用而又有趣的模块,主要分为爬虫.数据处理.可视化.机器学习.神经网络.股票财经.游戏这7个方面. 主要内容如下: 1.爬虫:相信大部分人都用Python ...
最新文章
- 在一家公司呆了 10 年的程序员,最后都怎么了?
- vue避免重新渲染_小白也能懂的VUE的生命周期探寻
- 【C#文件锁】C#加密解密文件小工具
- Linux学习之系统编程篇:IPC 和管道的基本概念及管道的创建
- 【终极办法】windows下安装完MySQL,为什么cmd不识别命令?
- 我的开源项目——Jerry
- html之文档的头部和元数据定义(下,未写完)
- JAVA中参数传递问题的总结(按值传递和引用传递)
- nginx fastcgi python_webpy + nginx + fastcgi 构建python应用
- hadoop中setup,cleanup,run和context讲解
- LInux下centos6.7 设置字符集,解决乱码问题
- arduino和python对接_Python:与Arduino进行交互-后续
- Raki的统计学习方法笔记0x9章:EM算法及其推广
- 血色冲锋队洛谷P1332(福建省历届夏令营)
- ACM大一练习赛-第三场------G - EPR悖论克鲁斯卡尔算法
- 从懵懂无知到独挡一面——那些萌新程序员的进阶之路
- 为你的梦想和目标去真正付出【时任树熊WIFI CTO时的一次内部分享】
- 【论文笔记】Civil Rephrases Of Toxic Texts With Self-Supervised Transformers
- 店铺每日生意营业流水记账本
- 文档对象模型 (DOM) :初学者介绍和指南
热门文章
- 【优化算法】改进的侏儒猫鼬优化算法(IDMO)【含Matlab源码 2314期】
- Linux进阶 | ❤Docker+NFS+Volume实现数据一致性❤
- DFS入门级(模板)
- mysql 触发器 同步表数据 统计表数据
- Arnold阿诺德渲染器C4D插件安装及激活教程
- DiabloFX展示模板 joomla多用途二手房公司企业博客商业主题
- MIME (多用途互联网邮件扩展类型)
- 缓存击穿和雪崩常用解决方案
- springboot+vue新生宿舍管理系统(源码+说明文档),一款优秀的毕业设计
- 遂冀机器人_河北省电化教育馆关于举办河北省第五届中小学教育机器人暨创客竞赛活动的通知...