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不提供任何处理窗口事件的方法。例如:当单击窗口的关闭按钮时,并不能关闭应用程序。

处理文件、摄像头和图形用户界面相关推荐

  1. Python wxpython篇 | Python生态库之图形用户界面开发库 “wxPython “ 的安装及使用(附. 使用pyinstaller 库打包Python随机点名小程序程序.exe文件)

    全文目录 wxPython 图形用户界面 PyCharm 中安装 wxPython库 PyCharm中将程序打包成 .exe 可执行文件 wxPython 的使用 第一个wxPython 程序 自定义 ...

  2. Ubuntu18.04.1在图形用户界面下移动和复制文件时权限不够问题的解决

    Ubuntu18.04.1在图形用户界面下移动文件到本地目录时是不会发生错误的, 但是当移动文件到位于本机计算机的目录下时会发生错误提示:权限不够. 解决方法:在终端下打开一个具有管理员权限的文件管理 ...

  3. 《OpenCV3编程入门》学习笔记3 HighGUI图形用户界面初步

    第3章 HighGUI图形用户界面初步 3.1 图像的载入.显示和输出到文件 1.OpenCV命名空间2种访问方法 (1)代码开头加:usingnamespace cv; (2)每个类或函数前加:cv ...

  4. matlab图形用户界面设计简介

    1.File->New->GUI->Create New GUI->Blank GUI->OK即可打开图形用户界面开发环境. 在里面可以拖放需要的控件,包括pushbut ...

  5. 出色图形用户界面(GUI)设计规范

    来源:  作者:James Hobart 翻译:spark.bbs@bbs.nankai.edu.cn [字体:大 中 小] 出色图形用户界面(GUI)设计规范 作者:James Hobart 翻译: ...

  6. 计算机的图形用户界面,2017计算机等级考试知识点:认识图形用户界面

    2.2认识图形用户界面 [图形用户界面技术] ●多窗口技术:所见即所得,一屏多用,任务切换,资源共享,信息共享. ●菜单技术:所有的命令都变成直观可见的菜单形式,无需用户记忆和输入命令. ●联机帮助技 ...

  7. linux 图形用户界面 x window system 简介

    X window 是Unix/Linux系统上的图形用户界面,一个Linux的发行版,比如说Ubuntu,都是Linux内核加上图形用户界面(比如GNome,KDE)再加一堆应用软件组成的.所以说x ...

  8. python图形用户界面设计报告_19.1 Python图形用户界面开发工具包

    ,赠送一本"Python相关图书".咨询方式:加[51CTO-关老师付费群]523714201 验证消息:咨询赠书 本视频采用**Python 3.X版 本书是智捷课堂开发的立体化 ...

  9. python打开界面是什么样的-python学习笔记(图形用户界面)

    GUI python提供了多个图形开发界面的库,几个常用Python GUI库如下: Tkinter: Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的 ...

最新文章

  1. 《星辰变OL》估计很多人看过这书
  2. 3.放弃CHAR吧,在铸成大错之前!
  3. 大牛书单 | 读懂5G,改变社会
  4. volatile 和 sig_atomic_t
  5. [FxCop.设计规则]13. 定义自定义属性参数的访问属性
  6. Idea报错,但是项目可以正常启动运行
  7. html5上传视频和预览,HTML5 上传前预览
  8. ucos ii 源代码中文注释详解: OS_CPU.c
  9. 【数据结构与算法】完结
  10. AndroidStudio与eclipse打包的时候报错。Error:(4) Error: ssdk_instapager_login_html is not translated in......
  11. ELAS_ROS算法在KITTI数据集上生成稠密点云
  12. 三人表决器c语言实验报告,项目一:三人表决器的逻辑电路设计与制作
  13. Activiti6 下载安装
  14. 按键精灵手机助手基本教程以及命令-1
  15. Java 实现加减乘除
  16. worldpress怎么增加登录注册按钮
  17. 伊朗太阳能光伏市场:易建钱难筹
  18. 数码数字字体_数码相机的分类及单反数码相机、卡片数码相机的介绍
  19. 【手机变身无线音箱-WIFI流媒体传输】--音乐在PC和手机间双向播放-详解Android DLNA使用-使用DLNA实现不同设备间媒体共享...
  20. 关于论文的修改--对小修的response

热门文章

  1. java string 内存占用_JVM系列之:String,数组和集合类的内存占用大小
  2. linux mysql select_MySQL-Select语句高级应用
  3. jpannel设置位置xy_实用的摄影技巧!10种常见摄影场景的单反相机设置技巧!
  4. 使用 Web Tracing Framework 分析富 JS 应用的性能
  5. 前端为什么非要动静分离 说一下CDN托管的意义
  6. Mybatis参数传递及返回类型
  7. 完美解决IE8有两个进程的问题
  8. pat00-自测5. Shuffling Machine (20)
  9. 关于autoupgader的狗屎问题
  10. 好消息,关于2005的default provider