GUI特性
图像入门
读取图像
-
使用
cv.imread()函数读取图像。- 图像应该在工作目录或图像的完整路径应给出。
- 使用一个标志指定读取图像的方式。
-
函数格式
cv.imread(src,flag) -
参数介绍
参数 描述 src图像路径 flagcv.IMREAD_COLOR: 加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。cv.IMREAD_GRAYSCALE:以灰度模式加载图像cv.IMREAD_UNCHANGED:加载图像,包括alpha通道- 如果缺少文件,权限不当,格式不受支持或无效,当
print(图片)时,将返回None; - 该函数通过内容而不是文件扩展名来决定图像类型;
- 图像数据将以 B,G,R 的顺序存储;
- 可以使用 1,0,-1 代替表示参数flags的三种图像读取方式。
- 如果缺少文件,权限不当,格式不受支持或无效,当
-
例子
import numpy as np import cv2 as cv # 加载彩色灰度图像 img = cv.imread('messi5.jpg',0)
显示图像
-
使用函数
cv.imshow()在窗口中显示图像。窗口自动适合图像尺寸。-
函数格式
cv.imread(window,img, flags) -
参数描述
参数 描述 window窗口名称,它是一个字符串。
可以根据需要创建任意多个窗口,但可以使用不同的窗口名称。img图像对象
-
-
使用函数
cv.waitKey()绑定键盘-
函数格式
cv.waitKey(sec) -
参数介绍
参数 描述 sec以毫秒为单位的时间,等待任何键盘事件指定的毫秒 -
如果在这段时间内按下任何键,程序将继续运行。
-
如果0被传递,它将无限期地等待一次敲击键。它也可以设置为检测特定的按键
-
-
使用函数摧毁窗口
cv.destroyAllWindows()只会破坏我们创建的所有窗口。- 如果要销毁任何特定的窗口,请使用函数
cv.destroyWindow()在其中传递确切的窗口名称作为参数。
-
使用函数
cv.namedWindow()创建窗口- 通过功能
cv.namedWindow()创建一个空窗口,然后再将图像加载到该窗口。 - 可以指定窗口是否可调整大小。
- 默认情况下,该标志为
cv.WINDOW_AUTOSIZE。 - 如果将标志指定为
cv.WINDOW_NORMAL,则可以调整窗口大小。当图像尺寸过大以及向窗口添加跟踪栏时,这将很有帮助。
- 默认情况下,该标志为
- 通过功能
-
例子
cv.namedWindow('image',cv.WINDOW_NORMAL) cv.imshow('image',img) cv.waitKey(0) cv.destroyAllWindows()
写入图像
-
使用函数
cv.imwrite()保存图像。 -
函数格式
cv.imwrite(filename,img,flags) -
参数介绍
参数 描述 filename 文件名 img 要保存的图像 flags 可选参数 - flags参数
- cv2.IMWRITE_JPEG_QUALITY:对于jpeg格式的图片使用该参数。其表示的是图像的质量,值用0-100的整数表示,默认为95;
- cv2.IMWRITE_PNG_COMPRESSION:对于png格式的图片使用该参数,表示的是压缩级别,值从0到9,压缩级别越高,图像尺寸越小。默认级别为3;
- cv2.CV_IMWRITE_WEBP_QUALITY:设置图片的格式为webp格式的图片质量,值为0-100。
- flags参数
-
例子
import numpy as np import cv2 as cv img = cv.imread('text.jpg',0) cv.imshow('image',img) k = cv.waitKey(0) if k == 27: # 等待ESC退出 cv.destroyAllWindows() elif k == ord('s'): # 等待关键字,保存和退出 cv.imwrite('messigray.png',img) cv.destroyAllWindows()
视频入门
从相机中读取视频
-
使用
VideoCapture对象捕获视频-
函数格式
cv.VideoCapture() -
参数介绍
- 参数是设备索引或视频文件的名称。设备索引就是指定哪个摄像头的数字。正常情况下,一个摄像头会被连接。可以通过传递1来选择第二个相机,以此类推。
- 可以通过传递1来选择第二个相机,以此类推。
-
isOpened()方法检查VideoCapture是否已初始化。- 如果是
True,那么确定。 - 否则,使用
cap.open()打开它。
- 如果是
-
例子
import numpy as np import cv2 as cv cap = cv.VideoCapture(0) if not cap.isOpened(): print("Cannot open camera") exit() while True: # 逐帧捕获 ret, frame = cap.read() # 如果正确读取帧,ret为True if not ret: print("Can't receive frame (stream end?). Exiting ...") break # 我们在框架上的操作到这里 gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # 显示结果帧e cv.imshow('frame', gray) if cv.waitKey(1) == ord('q'): break # 完成所有操作后,释放捕获器 cap.release() cv.destroyAllWindows()
-
-
使用
VideoCapture对象的read()捕获帧-
函数格式
import cv2 as cv cap = cv.VideoCapture() ret, frame = cap.read() -
返回值介绍
返回值 描述 ret 布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。 frame rame就是每一帧的图像,是个三维矩阵,类型为 numpy.ndarray 类型。
-
-
使用
VideoCapture对象的get(propId)方法访问该视频的某些功能-
函数格式
cv.VideoCapture.get(propId) -
参数介绍
propId是 0 到 18 之间的一个数字。每个数字表示视频的属性(如果适用于该视频)
-
函数功能
param define cv2.VideoCapture.get(0) 视频文件的当前位置(播放)以毫秒为单位 cv2.VideoCapture.get(1) 基于以0开始的被捕获或解码的帧索引 cv2.VideoCapture.get(2) 视频文件的相对位置(播放):0=电影开始,1=影片的结尾。 cv2.VideoCapture.get(3) 在视频流的帧的宽度 cv2.VideoCapture.get(4) 在视频流的帧的高度 cv2.VideoCapture.get(5) 帧速率 cv2.VideoCapture.get(6) 编解码的4字-字符代码 cv2.VideoCapture.get(7) 视频文件中的帧数 cv2.VideoCapture.get(8) 返回对象的格式 cv2.VideoCapture.get(9) 返回后端特定的值,该值指示当前捕获模式 cv2.VideoCapture.get(10) 图像的亮度(仅适用于照相机) cv2.VideoCapture.get(11) 图像的对比度(仅适用于照相机) cv2.VideoCapture.get(12) 图像的饱和度(仅适用于照相机) cv2.VideoCapture.get(13) 色调图像(仅适用于照相机) cv2.VideoCapture.get(14) 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升) cv2.VideoCapture.get(15) 曝光(仅适用于照相机) cv2.VideoCapture.get(16) 指示是否应将图像转换为RGB布尔标志 cv2.VideoCapture.get(17) × 暂时不支持 cv2.VideoCapture.get(18) 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)
-
从文件播放视频
-
方法:只是用视频文件名更改摄像机索引。
-
在显示框架时,请使用适当的时间
cv.waitKey()。正常情况下25毫秒就可以了。- 如果太小,则视频将非常快,
- 如果太大,则视频将变得很慢。
-
例子
import numpy as np import cv2 as cv cap = cv.VideoCapture('vtest.avi') while cap.isOpened(): ret, frame = cap.read() # 如果正确读取帧,ret为True if not ret: print("Can't receive frame (stream end?). Exiting ...") break gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) cv.imshow('frame', gray) if cv.waitKey(1) == ord('q'): break cap.release() cv.destroyAllWindows()
保存视频
-
通过
cv2.VideoWriter_fourcc指定编码格式和文件名后缀cv2.VideoWriter_fourcc('I', '4', '2', '0')- 该参数是YUV编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc('P', 'I', 'M', 'I')- 该参数是MPEG-1编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')- 该参数是MPEG-4编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc('T', 'H', 'E', 'O')- 该参数是Ogg Vorbis,文件名后缀为.ogv
cv2.VideoWriter_fourcc('F', 'L', 'V', '1')- 该参数是Flash视频,文件名后缀为.flv
-
通过
cv2.VideoWriter保存视频-
函数格式
cv2.VideoWriter(filename, fourcc, fps, frameSize[, isColor]) -
参数介绍
参数 说明 filename 要保存的文件的路径 fourcc 指定编码器 fps 要保存的视频的帧率 frameSize 要保存的文件的画面尺寸 isColor 指示是黑白画面还是彩色的画面(默认是灰度)
-
-
cv2.VideoWriter对象中的写入函数-
函数格式
out.write(frame) -
参数介绍
参数 说明 out cv2.VideoWriter赋值的变量名 frame 每一帧写入的图像画面
-
-
释放资源并关闭窗口
object.release()- object是所占用资源的对象,例如:cv2.VideoCapture,cv2.VideoWriter
- 用于释放占用的内存资源。
cv2.destroyAllWindows()- 来关闭窗口并取消分配任何相关的内存使用。
-
例子
import numpy as np import cv2 as cv cap = cv.VideoCapture(0) # 定义编解码器并创建VideoWriter对象 fourcc = cv.VideoWriter_fourcc(*'XVID') out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480)) while cap.isOpened(): ret, frame = cap.read() if not ret: print("Can't receive frame (stream end?). Exiting ...") break frame = cv.flip(frame, 0) # 写翻转的框架 out.write(frame) cv.imshow('frame', frame) if cv.waitKey(1) == ord('q'): break # 完成工作后释放所有内容 cap.release() out.release() cv.destroyAllWindows()
绘图功能
创建黑色图像
-
函数原型
img=np.zeros((width,height),void aux) -
绘制灰度图像
img=np.zeros((width,height),dtype=np.uint8) -
函数彩色图像
img=np.zeros((width,height),dtype=np.float32)
绘制直线
-
函数格式
cv2.line(img,pt1,pt2,color,thickness) -
参数介绍
参数 描述 img 图像 pt1 起始坐标 pt2 终止坐标 color 线条颜色 thickness 笔画宽度
绘制矩形
-
函数格式
cv2.rectangle(img,pt1,pt2,color,thickness) -
参数介绍
参数 描述 img 图像 pt1 起始坐标 pt2 终止坐标 color 线条颜色 thickness 笔画宽度(-1表示闭合图形)
绘制圆形
-
函数格式
cv2.circle(img,center,radius,color,thickness) -
参数介绍
参数 描述 img 图像 center 圆心坐标 radius 圆直径 color 线条颜色 thickness 笔画宽度 指定-1时,若为闭合图形,则填充整个图像
绘制椭圆
-
函数格式
cv2.ellipse() -
参数介绍
参数 描述 img 图像 center 椭圆中心坐标 axes 长轴和短轴长度 angle 椭圆沿逆时针方向旋转的角度(0) startAngle 椭圆弧顺时针方向起始的角度(0) endAngle 椭圆弧顺时针方向结束的角度(360) color 线条颜色 thickness 笔画宽度 指定 -1 时,若为闭合图形,则填充整个图像
绘制多边形
-
画多边形,需要指点每个顶点的坐标。用这些点的坐标构建一个大小等于行数。
-
函数格式
cv2.polylines() -
参数介绍
参数 描述 img 图像 pts 多边形曲线点的数组
点组成形状为ROWSx1x2的数组,其中ROWS是顶点数,并且其类型应为int32。isClosed 指示绘制的多段线是否闭合的标志
如果第三个参数为False,您将获得一条连接所有点的折线,而不是闭合形状color 颜色 thickness 多段线边的厚度 lineType 线段的类型 shift 顶点坐标中的小数位数
绘制文字
-
函数格式
cv2.putText() -
参数介绍
参数 描述 img 图像 text 文字内容 org 文字左下角起始坐标 fontFace 字体 fontScale 文字大小 color 颜色 thickness 多段线边的厚度 lineType 线段的类型

本文详细介绍了使用OpenCV进行图像读取、显示、保存,以及基本的GUI编程,包括创建窗口、显示图像、键盘控制和视频操作。涵盖了cv.imread()、cv.imshow()、VideoCapture对象的使用以及绘图功能如直线、矩形、圆形等。
917





