OpenCv with Python for Image and Video Analysis(3/20)

OpenCv with Python for Image and Video Analysis

P1 intro and loading Images

1.利用cv2显示图像

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
import matplotlib.pyplot as plt
import cv2

img = cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE) #灰度图读入
#读图片
#IMREAD_GRAYSCALE = 0 灰度
#IMREAD_COLOR = 1 颜色
#IMREAD_UNCHANGE= -1 不变
cv2.imshow('image', img) #以窗口打开img,窗口名字叫做img
cv2.waitKey(0) #等待键入
cv2.destroyAllWindows() #关闭所有窗口

2.使用matplotlib显示图像

1
2
3
4
5
6
7
8
9
import numpy as np
import matplotlib.pyplot as plt
import cv2

img = cv2.imread('cat.jpg', cv2.IMREAD_GRAYSCALE)
plt.imshow(img,cmap='gray',interpolation='bicubic')
plt.plot([50,100],[80,100],'c',linewidth=5)#linewidth=划线的宽度 'c'指线的颜色为青色
plt.show()
cv2.imwrite('gray.png', img)#保存img

Colormap是MATLAB里面用来设定和获取当前色图的函数,可以设置如下色图:

hot 从黑平滑过度到红、橙色和黄色的背景色,然后到白色。

cool 包含青绿色和品红色的阴影色。从青绿色平滑变化到品红色。

gray 返回线性灰度色图。

bone 具有较高的蓝色成分的灰度色图。该色图用于对灰度图添加电子的视图。

white 全白的单色色图。

spring 包含品红和黄的阴影颜色。

summer 包含绿和黄的阴影颜色。

autumn 从红色平滑变化到橙色,然后到黄色。

winter 包含蓝和绿的阴影色。

3.matplotlib中图片时rgb顺序,cv2中时bgr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np
import matplotlib.pyplot as plt
import cv2

img = cv2.imread('cat.jpg')
b, g, r = cv2.split(img)
img2 = cv2.merge([r, g, b])
# img2 = img[:,:,::-1] this can be faster
plt.subplot(121) #subplot(xyz)的意思时分成x行y列个图 这是第z个图
plt.imshow(img) # expects distorted color
plt.subplot(122)
plt.imshow(img2) # expects true color
plt.show()

cv2.imshow('bgr image', img) # expects true color
cv2.imshow('rgb image', img2) # expects distrorted color
cv2.waitKey(0)
cv2.destroyAllWindows()

8o902t.png

8oPxHO.th.png8oiPCd.th.png

​ bgr image rgb image

P2 loading video source

1.加载摄像头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
import matplotlib.pyplot as plt
import cv2

cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame)
#gray = cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY) 灰度图展示
#cv2.imshow('gray', gray)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()

1、cap = cv2.VideoCapture(0)

VideoCapture()中参数是0,表示打开笔记本的内置摄像头

参数是视频文件路径则打开视频,如cap = cv2.VideoCapture(“../test.avi”)

2、ret,frame = cap.read()

cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。

3、cv2.waitKey(1),waitKey()方法本身表示等待键盘输入

参数是1,表示延时1ms切换到下一帧图像,对于视频而言;

参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;

参数过大,如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。

得到的是键盘输入的ASCII码,ord(‘q’)表示q的ascii码

4、调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。
5.cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY) 用于转换颜色

2.录制视频

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import numpy as np
import matplotlib.pyplot as plt
import cv2

cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while True:
ret, frame = cap.read()
out.write(frame)
cv2.imshow("frame", frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()

1.详解cv2.VideoWriter_fourcc对象(摘自Learning OpenCV3 Computer Vision with Python)

定义编码器:

fourcc意为四字符代码(Four-Character Codes),顾名思义,该编码由四个字符组成,下面是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

2.out = cv2.VideoWriter(‘output.avi’, fourcc, 20.0, (640, 480))

向视频文件写入一帧,输出成为output.avi文件,fourcc 指定编码器,fps=20.0 代表20帧,frameSize 要保存的文件的画面尺寸。

P3 drawing and writing on image


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!