目录
cv.getTickCount() / cv.getTickFrequency()
一、安装OpenCV
pip install opencv-python
二、处理文件、摄像头和图形用户界面
1. 图像基本操作
(1) 加载图像
cv2.imread(filename, flags) -> retval
从文件加载图片,其中
- filename - 加载文件的名称。
- flags - 指明加载图片的色彩类型。
- CV_LOAD_IMAGE_ANYDEPTH: 如果设置,则在输入具有相应深度时返回16位/32位图像,否则返回8位图像。
- CV_LOAD_IMAGE_COLOR: 如果设置,总是把图像转换为有彩色的。
- CV_LOAD_IMAGE_GRAYSCALE: 如果设置,总是把图像转换为灰度图。
- >0 : 返回一张3通道的图片,即把原图作为RGB图像加载进来。
- =0 : 把原图作为灰度图像加载进来。
- <0 : 加载原图,不做任何改变。
(2) 创建窗口
cv2.namedWindow(winname, flags) -> None
创建一个窗口,其中
- name - 窗口名称。
- flags - 窗口的标签。
- WINDOW_NORMAL: 允许修改窗口大小。
- WINDOW_AUTOSIZE: 会自动根据图像大小,显示窗口大小,不能人为改变窗口大小。
- WINDOW_OPENGL: 根据OpenGL支持创建窗口。
注:如果同名的窗口已经存在,则这个方法什么也不做。
(3) 显示图像
cv2.imshow(winname, mat) -> None
在指定窗口显示图片,其中
- winname - 窗口的名称。
- mat - 将要显示的图片。
注:这个方法应该和waitKey()方法一起使用,后者表示图片显示多长时间,否则不会显示图片。waitKey(0)表示永久显示图片直到有键按下;waitKey(25)表示显示25ms,然后窗口会被关掉。(如果在一个循环里读取摄像头的,它会逐帧显示视频)
(4) 修改图像
cv2.cvtColor(src, code, dst, dstCn) -> dst
转换图片的彩色空间,其中
- src - 输入图像,depth为:
- CV_8U,取值范围为0~255。
- CV_16U,取值范围为0~65535。
- CV_32F,取值范围为0~1。
- dst - 输出图像,和输入图像有相同的depth。
- code - 彩色空间转换code,见下表。
- dstCn - 输出图像的通道数。如果为0,通道数由src和code自动派生。
注:RGB彩色空间在OpenCV中的颜色顺序为BGR。
(5) 保存图像
cv2.imwrite(filename, img, params) -> retval
保存图像,其中
- filename - 文件名(包含扩展名,文件格式由扩展名指定)。
- image - 要保存的图像。
- params - 指明编码对。
- JPEG: 它可以是从0~100的质量(越高越好),默认值是95。
- PNG: 它可以是从0~9的压缩比(越高,文件越小,压缩时间更长),默认值是3
- PPM, PGM or PBM: 二进制格式的标签,0或者1,默认值是1。
使用此功能只能保存8位(或对于PNG、JPEG2000和TIFF的16位无符号)单通道或者3通道(BGR的通道顺序)的图像。如果格式、深度或者通道顺序不同,在保存前用convertTo()和cvtColor()方法转换。
(6) 销毁窗口
cv2.destroyAllWindows() -> None
销毁所有窗口.
import cv2 as cv2
src = cv2.imread("D:/Temp/11.jpg")
cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image", src)
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 读取视频,打开摄像头
(1) VideoCapture构造方法
cv2.VideoCapture() -> VideoCapture对象
cv2.VideoCapture(filename) -> VideoCapture对象
用视频文件构造VideoCapture对象,其中
- filename - 初频文件的名字(eg. video.avi)或者图片序列(eg. img_%02d.jpg,这将会读取img_00.jpg, img_01.jpg, img_02.jpg, ...)
cv2.VideoCapture(device) -> VideoCapture对象
用摄像头的id来构造VideoCapture对象,其中
- device - VideoCapture设备的id。如果只有一个摄像头连接,则传0。
(2) 视频帧左右调换,回正,镜像调换
cv2.flip(src, flipCode, dst) -> dst
围绕 垂直、水平或对角线 翻转二维数组。其中
- src - 输入数组。
- flipCode - 指明数组旋转的方式:
- 0表示绕x轴旋转;
- 正数(比如1)表示绕y轴旋转;
- 负数(比如-1)表示绕对角线y=x轴旋转。
- dst - 输出数组,和输入数组有相同的大小和类型。
import cv2 as cv
camera = cv.VideoCapture("D:/Temp/python_project/test_data/video/snow.mp4")
while (True):
ret, frame = camera.read()
if ret:
frame = cv.flip(frame, 1)
cv.imshow("video", frame)
cv.waitKey(10)
else:
break
cv.destroyAllWindows()
camera.release()
三、使用OpenCV处理图像
1. 色彩空间
(1) 灰度色彩空间
(2) BGR色彩空间
类似于RGB色彩空间,就是颜色顺序不同。
(3) HSV
H: 色调(Hub),取值泛围是0~180
S: 饱和度(Saturation),取值泛围是0~255
V: 亮度(Value),取值泛围是0~255
|
黑 |
灰 |
白 |
红 |
橙 |
黄 |
绿 |
青 |
蓝 |
紫 |
|
hmin |
0 |
0 |
0 |
0 |
156 |
11 |
26 |
35 |
78 |
100 |
125 |
hmax |
180 |
180 |
180 |
10 |
180 |
25 |
34 |
77 |
99 |
124 |
155 |
smin |
0 |
0 |
0 |
43 |
43 |
43 |
43 |
43 |
43 |
43 |
|
smax |