目录
- 基本函数
-
- cv2.imread(filepath,flags)
- cv2.imshow(wname,img)
- cv2.waitKey(delay)
- cv2.imwrite(file,img,num)
- cv2.destroyAllWindows()
- cv2.destroyWindow(wname)
- cv2.VideoCapture(0)
- cv2.cvtColor(img,flag)
- cv2.flip(img,flipcode)
- cv2.VideoWriter_fource()
- cv.2VideoWriter(filename, fourcc, fps, frameSize[, isColor])
- 视频读取辅助操作函数
-
- cap.isOpened()
- cap.read()
- cap.release()
- 画图操作
-
- cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → img
- cv2.circle(img, center_coordinates, radius, color, thickness)
- cv2.rectangle(img, start_point, end_point, color, thickness)
- cv2.ellipse(img, centerCoordinates, axesLength, angle, startAngle, endAngle, color [, thickness[, lineType[, shift]]])
- cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)
- cv2.putText(img, text, org, font, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
- cv2.setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0)
- numpy相关辅助函数
-
- np.zeros(shape,dtype=float,order='C')
- numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
- array.reshape()
基本函数
cv2.imread(filepath,flags)
- filepath:图片的完整路径,如果图片在程序同一目录下,可以使用图片名和格式,如:image.png
- flags:图片读取的形式,可以不写
- cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1
- cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0
- cv2.IMREAD_UNCHANGED:包括alpha,可以直接写-1
cv2.imshow(wname,img)
- wname:显示图片的窗口的名字
- img:要显示的图片,这里的img是指cv2.imread()读取的图片如:
img = cv2.imread('test.png',0)
cv2.imshow('image',img)
cv2.waitKey(delay)
长在cv2.imshow()过后用来设置关闭图片的条件
- delay:delay 的单位为ms毫秒
- 当delay > 0,程序在给定的 delay 时间内等待用户按键触发,返回按下键的ASCII码值,如果用户没有按下键,则返回-1。
- 当delay <= 0,则表示延时无限长,必须有按键按下才继续执行,返回按下键的ASCII码值
- 没有,同delay <= 0
//判断键盘输入是否为字母q
if cv2.waitKey(1) & 0xFF == ord('q'):
&0xFF是为了将得到的ASCII码值做截取,只保留8位,原因是有些系统的cv2.waitKey()返回值不止8位
cv2.imwrite(file,img,num)
- file为保存的文件名,是一个字符串
- img是要保存的图像
- num为可选参数
- 对于jpeg,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3.
1. cv2.IMWRITE_JPEG_QUALITY类型为 long ,必须转换成 int
2. cv2.IMWRITE_PNG_COMPRESSION, 从0到9 压缩级别越高图像越小
cv2.imwrite('1.png',img, [int( cv2.IMWRITE_JPEG_QUALITY), 95])
cv2.imwrite('1.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
cv2.destroyAllWindows()
销毁所有窗口
cv2.destroyWindow(wname)
销毁指定名称的窗口
wname:要销毁的窗口名
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27:
cv2.destroyAllWindows()
elif k == ord('s'):
cv2.imwrite('test2.jpg',img)
cv2.destroyWindow('image')
cv2.VideoCapture(0)
- 参数为0表示默认为笔记本内置的第一个摄像头,如果需要读取已有的视频则参数改为视频所在路径路径,例如:
cap=cv2.VideoCapture(‘video.mp4’)
cv2.cvtColor(img,flag)
- img:需要转化的图片
- flag:转换类型
- 返回值为转换后的图片
- flag格式
cv2.COLOR_X2Y,其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS
例子:
img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
可使用如下命令得到可使用的flag(没试过)
import cv2
import numpy as np
flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
print(flags)
cv2.flip(img,flipcode)
- img:需要操作的图片
- flipcode:翻转方式
flipcode |
翻转方式 |
1 |
水平翻转 |
0 |
垂直翻转 |
-1 |
水平垂直翻转 |
cv2.VideoWriter_fource()
|
|
cv2.VideoWriter_fourcc(‘M’, ‘P’, ‘4’, ‘V’) |
MPEG-4编码 .mp4 可指定结果视频的大小 |
cv2.VideoWriter_fourcc(‘X’,‘2’,‘6’,‘4’) |
MPEG-4编码 .mp4 可指定结果视频的大小 |
cv2.VideoWriter_fourcc(‘I’, ‘4’, ‘2’, ‘0’) |
该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件 |
cv2.VideoWriter_fourcc(‘P’, ‘I’, ‘M’, ‘I’) |
该参数是MPEG-1编码类型,文件名后缀为.avi,随机访问,灵活的帧率、可变的图像尺寸、定义了I帧、P帧和B帧、运动补偿可跨越多个帧、半像素精度的运动向量、量化矩阵、GOF结构、slice结构、技术细节、输入视频格式 |
cv2.VideoWriter_fourcc(‘X’, ‘V’, ‘I’, ‘D’) |
该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小 |
cv2.VideoWriter_fourcc(‘T’, ‘H’, ‘E’, ‘O’) |
该参数是Ogg Vorbis,文件名后缀为.ogv,音频压缩格式,有损压缩,类似于MP3等的音乐格式。兼容性差,文件扩展名为.ogv。 |
cv2.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘1’) |
该参数是Flash视频,文件名后缀为.flv,它形成的文件极小、加载速度极快 |
cv.2VideoWriter(filename, fourcc, fps, frameSize[, isColor])
返回一个VideoWriter
- filename:要保存的文件的路径
- fource:指定编码器
- fps:要保存的视频的帧率
- frameSize:要保存的文件的画面尺寸如:(1024,1024)
- isColor:指示是黑白画面还是彩色的画面,Ture或False
例子:从摄像头读取一段视频并保存
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('testwrite.avi',fourcc, 20.0, (1920,1080),True)
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
cv2.imshow('frame',frame)
out.write(frame)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
视频读取辅助操作函数
对视频对象cap操作
cap.isOpened()
判断视频对象是否读取成功,成功返回True
cap.read()
- 返回两个值ret和frame
- ret:布尔值,读取正确返回True,读取错误或者到读取到末尾返回False
- frame是每一帧的图像,为三维矩阵,frame就是需要显示的内容
cap.release()
将视频cap占用的资源释放
画图操作
cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → img
在图片上画一条直线,返回处理后的图片
cv2.circle(img, center_coordinates, radius, color, thickness)
在指定图片上画圆,返回操作后的图片
- img:要在其上绘制圆的图像
- center_coordinates:圆的中心坐标,坐标表示为两个值的元组,即(X坐标值,Y坐标值)
- radius:圆的半径
- color:它是要绘制的圆的边界线的颜色,对于BGR,我们通过一个元组,例如:(255,0,0)为蓝色
- thickness:圆边界线的粗细像素,厚度-1像素将以指定的颜色填充整个圆
cv2.rectangle(img, start_point, end_point, color, thickness)
在指定图片上画一个矩形,返回操作后的图片
- img:要在其上绘制矩形的图像
- start_point:左上角坐标
- end_point:右上角坐标
- color:要绘制的矩形的边界线的颜色,对于BGR,我们传入一个元组,例如:(255,0,0)为蓝色
- thickness:矩形边框线的粗细像素,厚度-1像素将以指定的颜色填充矩形形状
cv2.ellipse(img, centerCoordinates, axesLength, angle, startAngle, endAngle, color [, thickness[, lineType[, shift]]])
在指定图片上绘制一个椭圆,返回绘制后的图片
- img:原始图像
- centerCoordinates:椭圆的中心坐标
- axesLength:包含两个变量的元组,分别包含椭圆的长轴和短轴(长轴长度,短轴长度)
- angle:椭圆旋转角度,以度为单位
- startAngle:椭圆弧的起始角度,以度为单位
- endAngle:椭圆弧的终止角度,以度为单位
- color:要绘制的形状边界线的颜色
- thickness:边界线的粗细像素,厚度-1像素将用指定的颜色填充形状
- lineType:可选参数,它给出了椭圆边界的类型
- shift:可选参数,它表示中心坐标中的小数位数和轴的值
cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)
在给定图像img上画多边形或折线段
- img:原始图像
- pts:顶点
- isClosed:是否闭合
- color:线段颜色
- thickness:线的厚度,如果封闭图形传入-1则填充整个图形
- lineType:线型
- shift:默认为0
cv2.putText(img, text, org, font, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
在图片指定位置打印字符串
- img:原始图像
- text:要绘制的文本字符串
- org:图像中文本字符串左下角的坐标,坐标表示为两个值的元组,即(X坐标值,Y坐标值)
- font:字体类型,一些字体类型是cv2.FONT_HERSHEY_SIMPLEX,cv2.FONT_HERSHEY_PLAIN等
- fontScale:字体比例因子乘以font-specific基本大小
- color:要绘制的文本字符串的颜色
- thickness:线的粗细像素
- lineType:可选参数,它给出了要使用的行的类型
- bottomLeftOrigin:可选参数。如果为true,则图像数据原点位于左下角。否则,它位于左上角
cv2.setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0)
- winname:窗口的名字
- onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param)
- userdata:可选参数,传给回调函数的参数
void on_Mouse(int event, int x, int y, int flags, void* param)
- event:事件类型
- x,y坐标
- flags:事件发生的时候按下鼠标的那个键
- param:指向任意对象的指针,作为附件的参数发送给函数
event鼠标事件
|
|
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 |
中键双击 |
numpy相关辅助函数
np.zeros(shape,dtype=float,order=‘C’)
- shape:形状,如(2,5)
- dtype:数据类型,可选参数,默认numpy.float64
- order:可选参数,c代表与c语言类似,行优先;F代表列优先
- 返回一个给定形状和类型的用0填充的数组,实际上就是一个数组,当shape为(2,5)时,返回一个2行5列的全为0的数组,0的类型由dtype决定
numpy.array(object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0)
创建并返回一个数组
- object:数组
- dtype:数据类型,可选
- copy:对象是否需要复制,可选
- order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
- subok:默认返回一个与基类类型一致的数组
- ndmin:指定生成数组的最小维度
array.reshape()
array用具体的数组代替
- 参数为一个N元组如:(2,3,4)表示转换成一个2页3行4列的新数组,(-1,3,4)表示转换成一个n页3行4列的的新数组,其中n由后面的维度计算出来,比如原数组一共有24个元素,则n=24/3/4=2页
由于转换前后的数组共用一个内存,改变一个另一个也会改变,所以可以直接使用array = array.reshape((x,y))的格式
a = np.array([1,2,3,4,5,6,7,8,9])
a = a.reshape((3,3))