处理文件、摄像头和图形用户界面
1、基本I/O脚本
1.1 读/写图像文件
import numpy
import cv2#利用二维Numpy数组简单创建一个黑色的正方形图像
img = numpy.zeros((3,3),dtype=numpy.uint8)
img
#结果为:
'''
array([[0, 0, 0],[0, 0, 0],[0, 0, 0]], dtype=uint8)
'''
img.shape#结果为:(3, 3)####################################################################利用cv2.cvtColor函数将该图像转化为BGR格式
img1 = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
img1
#结果为:
'''
array([[[0, 0, 0],[0, 0, 0],[0, 0, 0]],[[0, 0, 0],[0, 0, 0],[0, 0, 0]],[[0, 0, 0],[0, 0, 0],[0, 0, 0]]], dtype=uint8)
'''
img1.shape#结果为:(3, 3, 3)
①将图像从PNG格式转换为JPG格式:
②将BGR图片转化为灰度图片:
import cv2image = cv2.imread("result.png")
cv2.imwrite("show.jpg",image)grayImage = cv2.imread('result.png',cv2.IMREAD_GRAYSCALE)
cv2.imwrite('gray.png',grayImage)
运行前:
运行后:
1.2 图像与原始字节之间的转换
将含有随机字节的bytearray转换为灰度图像和BGR图像:
import cv2
import numpy
import osrandomByteArray = bytearray(os.urandom(120000))
flatNumpyArray = numpy.array(randomByteArray)grayImage = flatNumpyArray.reshape(300,400)#(y,x)
cv2.imwrite('RandomGray.png',grayImage)bgrImage = flatNumpyArray.reshape(100,400,3)#(y,x,颜色通道数目)
cv2.imwrite('RandomColor.png',bgrImage)
运行前:
运行后:
1.3 使用numpy.array访问图像数据
将BGR图像在(10,10)处的像素转换为红像素
import cv2
import numpy as npimg = cv2.imread("result.png")
img[10,10] = [0,0,255]#[B,G,R]
cv2.imshow('yy',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果为:
将坐标(150,120的当前蓝色值(127)变为255:
import cv2
import numpy as np
img = cv2.imread("result.png")
print(img.item(50,20,0))
#pixel
img.itemset((150,20,0),255)
print(img.item(50,20,0))
cv2.imshow('yy',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果为:
操作通道:将指定通道(B,G,R)的值置为零,下列代码将图像所有的R通道设置为0(黑色),为了是效果更加明显,这里将图片选择纯红色的彩色照片。
import cv2
import numpy as np
img = cv2.imread("red.jpg")
img[:,:,2] = 0
cv2.imshow('yy',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
原始照片:
运行结果:
将该区域与变量绑定,然后设定第二个区域,并将第二个区域的值分配给第二个区域(将图像的一部分拷贝到改该图像的另一个位置)
原始图片:
运行结果:
获得图像属性:
shape::Numpy返回包含宽度、高度和通道数(如果图像是彩色的)的数组,这在调试图像类型时很有用:如果图像是单色或灰度的,将不包含通道值。
size:该属性是指图像像素的大小。
datatype:该属性会得到图像的数据类型(通常为一个无符号整数类型的变量和该类
型占的位数,比如uint8类型)。
import cv2
import numpy as np
img = cv2.imread("result.png")
print(img.shape)#结果为:(250, 250, 3)
print(img.size)#结果为:187500
print(img.dtype)#结果为:uint8
1.4 视频文件的读/写
Opencv提供了 Video Capture类和 Videowriter类来支持各种格式的视频文件。支持的格式类型会因系统的不同而变化,但应该都支持AWI格式。在到达视频文件末尾之前,Video Capture类可通过 reado函数来获取新的帧,每帧是一幅基于BGR格式的图像。
可将一幅图像传递给 Video Writer类的 write(0函数,该函数会将这幅图像加到Videowriter类所指向的文件中。
读取AVI文件(hahaha.avi)的帧,并采用YUV颜色编码将其写人另一个帧(xixixi.flv)中:
import cv2
videoCapture = cv2.VideoCapture("hahaha.avi")
fps = videoCapture.get(cv2.CAP_PROP_FPS)
size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
videoWriter = cv2.VideoWriter('xixixi.flv',cv2.VideoWriter_fourcc('F','L','V','1'),fps,size)success,frame = videoCapture.read()
while success:videoWriter.write(frame)success,frame = videoCapture.read()
运行结果:
代码 | 文件扩展名 | 备注 |
---|---|---|
cv2.VideoWriter fouree (T’, ‘4’,‘2’,‘0’) | .avi | 该选项是一一个未压缩的YUV颜色编码,是4:2:0色度子采样。这种编码有很好的兼容性,但会产生较大文件。 |
cv2.VideoWriter_ fouree (‘P’,T’, ‘M’, ‘1’) | .avi | 该选项是MPEG-1编码类型。 |
cv2.VideoWriter_ fourcc (‘X’, ‘V’,T, ‘D’) | .avi | 该选项是MPEG-4编码类型,如果希望得到的视频大小为平均值,推荐使用此选项。 |
cv2.VideoWriter_ fourcc(‘T’,‘H’,‘E’ ,‘O’) | .ogv | 该选项是Ogg Vorbis |
cv2.VideoWriter_ fourcc (‘F’,‘L’, ‘V’, ‘1’) | .flv | 该选项是一个Flash视频 |
1.5 捕获摄像头的帧并保存
捕获摄像头10s的视频信息,并写入一个AVI文件中:
import cv2cameraCapture = cv2.VideoCapture(0)
fps = 30
size = (int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
videoWriter = cv2.VideoWriter("siqi.avi",cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)success,frame = cameraCapture.read()
numFramesRemaining = 10*fps-1
while success and numFramesRemaining > 0:videoWriter.write(frame)success,frame = cameraCapture.read()numFramesRemaining -= 1
cameraCapture.release()
运行结果:
1.6 在窗口显示图像
import cv2
import numpy as npimg = cv2.imread("gray.png")
cv2.imshow('siqi_show',img)
cv2.waitKey()
cv2.destroyAllWindows()
运行结果:
1.7 在窗口显示摄像头帧
OpenCV的窗口函数和waitKey()函数相互依赖。OpenCV 的窗口只有在调用waitKey()函数时才会更新,waitKey()函数只有在OpenCV窗口成为活动窗口时,才能捕获输人信息。鼠标回调雨数setMouseCallback()有五个参数。param为可选参数,它是setMouseCallback(函数的第三个参数,默认情况下,该参数是0。
实时显示摄像头帧,按任意键结束:
import cv2clicked = False
def onMouse(event,x,y,flags,param):global clickedif event == cv2.EVENT_LBUTTONUP:clicked = TruecameraCapture = cv2.VideoCapture(0)
cv2.namedWindow('siqi')
cv2.setMouseCallback('siqi',onMouse)print('press any key to stop!')
success,frame = cameraCapture.read()
while success and cv2.waitKey(1) == -1 and not clicked:cv2.imshow('siqi',frame)success,frame = cameraCapture.read()cv2.destroyWindow('siqi')
cameraCapture.release()
运行结果:
回调事件参数可以取如下的值,它们分别对应不同的鼠标事件。
回调事件参数 | 事件描述 |
---|---|
cv2.EVENT MOUSEMOVE | 该事件对应鼠标移动 |
cv2. EVENT LBUTTONDOWN | 该事件对应鼠标左键按下 |
cv2. EVENT RBUTTONDOWN | 该事件对应鼠标右键按下 |
cv2.EVENT MBUTTONDOWN | 该事件对应鼠标中间键按下 |
cv2.EVENT LBUTTONUP | 该事件对应鼠标左键松开 |
cv2.EVENT_ RBUTTONUP | 该事件对应鼠标右键松开 |
cv2.EVENT MBUTTONUP | 该事件对应鼠标中间键松开 |
cv2.EVENT LBUTTONDBLCLK | 该事件对应双击鼠标左键 |
cv2.EVENT RBUTTONDBLCLK | 该事件对应双击鼠标右键 |
cv2.EVENT MBUTTONDBLCLK | 该事件对应双击鼠标中间键 |
鼠标回调的标志参数可能是以下事件的按位组合:
鼠标回调的标志参数 | 对应事件描述 |
---|---|
cv2.EVENT FLAG LBUTTON | 该事件对应按下鼠标左键 |
cv2.EVENT FLAG RBUTTON | 该事件对应按下鼠标右键 |
cv2.EVENT FLAG MBUTTON | 该事件对应按下鼠标中间键 |
cv2.EVENT FLAG CTRLKEY | 该事件对应按下Ctrl键 |
cv2.EVENT FLAG SHIFTKEY | 该事件对应按下Shift 键 |
cv2.EVENT FLAG ALTKEY | 该事件对应按下Alt键 |
OpenCV不提供任何处理窗口事件的方法。例如:当单击窗口的关闭按钮时,并不能关闭应用程序。
处理文件、摄像头和图形用户界面相关推荐
- Python wxpython篇 | Python生态库之图形用户界面开发库 “wxPython “ 的安装及使用(附. 使用pyinstaller 库打包Python随机点名小程序程序.exe文件)
全文目录 wxPython 图形用户界面 PyCharm 中安装 wxPython库 PyCharm中将程序打包成 .exe 可执行文件 wxPython 的使用 第一个wxPython 程序 自定义 ...
- Ubuntu18.04.1在图形用户界面下移动和复制文件时权限不够问题的解决
Ubuntu18.04.1在图形用户界面下移动文件到本地目录时是不会发生错误的, 但是当移动文件到位于本机计算机的目录下时会发生错误提示:权限不够. 解决方法:在终端下打开一个具有管理员权限的文件管理 ...
- 《OpenCV3编程入门》学习笔记3 HighGUI图形用户界面初步
第3章 HighGUI图形用户界面初步 3.1 图像的载入.显示和输出到文件 1.OpenCV命名空间2种访问方法 (1)代码开头加:usingnamespace cv; (2)每个类或函数前加:cv ...
- matlab图形用户界面设计简介
1.File->New->GUI->Create New GUI->Blank GUI->OK即可打开图形用户界面开发环境. 在里面可以拖放需要的控件,包括pushbut ...
- 出色图形用户界面(GUI)设计规范
来源: 作者:James Hobart 翻译:spark.bbs@bbs.nankai.edu.cn [字体:大 中 小] 出色图形用户界面(GUI)设计规范 作者:James Hobart 翻译: ...
- 计算机的图形用户界面,2017计算机等级考试知识点:认识图形用户界面
2.2认识图形用户界面 [图形用户界面技术] ●多窗口技术:所见即所得,一屏多用,任务切换,资源共享,信息共享. ●菜单技术:所有的命令都变成直观可见的菜单形式,无需用户记忆和输入命令. ●联机帮助技 ...
- linux 图形用户界面 x window system 简介
X window 是Unix/Linux系统上的图形用户界面,一个Linux的发行版,比如说Ubuntu,都是Linux内核加上图形用户界面(比如GNome,KDE)再加一堆应用软件组成的.所以说x ...
- python图形用户界面设计报告_19.1 Python图形用户界面开发工具包
,赠送一本"Python相关图书".咨询方式:加[51CTO-关老师付费群]523714201 验证消息:咨询赠书 本视频采用**Python 3.X版 本书是智捷课堂开发的立体化 ...
- python打开界面是什么样的-python学习笔记(图形用户界面)
GUI python提供了多个图形开发界面的库,几个常用Python GUI库如下: Tkinter: Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的 ...
最新文章
- 《星辰变OL》估计很多人看过这书
- 3.放弃CHAR吧,在铸成大错之前!
- 大牛书单 | 读懂5G,改变社会
- volatile 和 sig_atomic_t
- [FxCop.设计规则]13. 定义自定义属性参数的访问属性
- Idea报错,但是项目可以正常启动运行
- html5上传视频和预览,HTML5 上传前预览
- ucos ii 源代码中文注释详解: OS_CPU.c
- 【数据结构与算法】完结
- AndroidStudio与eclipse打包的时候报错。Error:(4) Error: ssdk_instapager_login_html is not translated in......
- ELAS_ROS算法在KITTI数据集上生成稠密点云
- 三人表决器c语言实验报告,项目一:三人表决器的逻辑电路设计与制作
- Activiti6 下载安装
- 按键精灵手机助手基本教程以及命令-1
- Java 实现加减乘除
- worldpress怎么增加登录注册按钮
- 伊朗太阳能光伏市场:易建钱难筹
- 数码数字字体_数码相机的分类及单反数码相机、卡片数码相机的介绍
- 【手机变身无线音箱-WIFI流媒体传输】--音乐在PC和手机间双向播放-详解Android DLNA使用-使用DLNA实现不同设备间媒体共享...
- 关于论文的修改--对小修的response
热门文章
- java string 内存占用_JVM系列之:String,数组和集合类的内存占用大小
- linux mysql select_MySQL-Select语句高级应用
- jpannel设置位置xy_实用的摄影技巧!10种常见摄影场景的单反相机设置技巧!
- 使用 Web Tracing Framework 分析富 JS 应用的性能
- 前端为什么非要动静分离 说一下CDN托管的意义
- Mybatis参数传递及返回类型
- 完美解决IE8有两个进程的问题
- pat00-自测5. Shuffling Machine (20)
- 关于autoupgader的狗屎问题
- 好消息,关于2005的default provider