Opencv是一个C++库,用于实时处理计算机视觉方面的问题,涵盖了很多计算机视觉领域的模块。
OpenCV有两个python接口,老版本的cv模块使用OpenCV内置的数据类型,新版本的cv2模块使用NumPy数组
cv2.waitKey() 是一个键盘绑定函数。它的时间尺度是毫秒级。
函数等待几毫秒,看是否有键盘输入。在几毫秒之内
如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。
如果没有键盘输入,返回值为 -1。
如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。
它也可以被用来检测特定键是否被按下,例如按键 a 是否被按下
cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删除的窗口名。
import cv2
# 调用笔记本内置摄像头,所以参数为0,如果有其他的摄像头可以调整参数为1,2
cap = cv2.VideoCapture(0)
# while True: # 死循环,让其一值读入图片
while cap.isOpened(): # 判断是否打开摄像头成功 返回值为一个布尔值
# _: 如果为true,则读取成功,反之不超过;frame: 读取的图片
_, frame = cap.read() # 读取一帧一帧的图像,放回值是一个布尔值
cv2.imshow("img", frame) # 进行显示
key = cv2.waitKey(1) # 等待一会 单位为毫秒,表示间隔时间
if key == ord('q'): # 按q键退出
break
cap.release() # 释放掉摄像头资源,防止在下次调用时不会出错
cv2.destroyAllWindows() # 用来删除窗口的,关闭窗口并取消分配任何相关的内存使用
cv2.imread(file,flag)
需要特别注意的是图片读出来的格式是BGR,不是我们最常见的RGB格式
函数imread从指定文件加载图像并返回一个numpy.ndarray对象类型像素值。
如果图像无法读取(由于文件丢失,权限不当,格式不受支持或格式无效),函数返回一个空矩阵
第二个参数是一个标志,用于指定应读取图像的方式。
cv2.IMREAD_COLOR:加载彩色图像。图像的任何透明度都将被忽略。这是默认标志。 flags=1
cv2.IMREAD_GRAYSCALE:以灰度模式加载图像 flags=0
cv2.IMREAD_UNCHANGED:加载包含Alpha通道的图像 flags=-1
import cv2
# 载入图像
img = cv2.imread(r"./car.jpg")
# 查看像素矩阵
# print("img:\n", img)
# print("*"*50)
# 查看形状 返回一个元组(高,宽,通道数)
# print("shape:\n", img.shape)
# print("*"*50)
# 打印图像尺寸
h, w = img.shape[:2]
print(h, w)
cv2.imshow(窗口名,图像)
窗口会自动调整为图像大小。
第一个参数是窗口的名字
第二个是我们的图像。
可以创建多个窗口,但是必须给他们不同的名字
img = cv2.imread(r"./car.jpg")
cv2.namedWindow("Image") # 窗口的名字
cv2.imshow("Image", img) # 显示图片
cv2.waitKey(0)
cv2.destroyAllWindows()
在OpenCV中,图像不是用常规的RGB颜色通道来存储的,用的是BGR顺序。
当读取一幅图像后,默认的是BGR,不过有很多转换方式可以利用。颜色空间转换函数可以用cvtColor()完成。
cv2.cvtColor(img_front,img_after)
img_front是需要转换的图片
img_after是转换成何种格式。
cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式
cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片
cv2.COLOR_BGR2HSV 将BGR格式转换成HSV格式
img = cv2.imread(r"./car.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("origin", img) # 显示原始图片
cv2.imshow("gray", gray) # 显示灰度图片
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite(file,img,num)
第一个参数:要保存的文件名
第二个参数:要保存的图像
第三个参数:它针对特定的格式:
对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95
对于png ,第三个参数表示的是压缩级别。默认为3.
注意:
cv2.IMWRITE_JPEG_QUALITY类型为 long ,必须转换成 int
cv2.IMWRITE_PNG_COMPRESSION, 从0到9 压缩级别越高图像越小。
# 载入图像
img = cv2.imread(r"./car.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite('gary_car.jpg', gray)
cv2.VideoWriter(filename, fourcc, fps, frameSize[, isColor])
filename:保存的文件的路径
fourcc:指定编码器
fps:要保存的视频的帧率
frameSize:要保存的文件的画面尺寸
isColor:保存的是黑白画面还是彩色的画面
cv2.VideoWriter_fourcc()
作用:指定视频编码格式
cv2.VideoWriter_fourcc(‘I’,‘4’,‘2’,‘0’):该参数是YUV编码类型,4:2:0色度子采样。兼容性好,但文件较大。文件扩展名.avi。
cv2.VideoWriter_fourcc(‘P’,‘I’,‘M’,‘1’):MPEG-1编码类型,文件扩展名.avi,可指定结果视频的大小
cv2.VideoWriter_fourcc(‘X’,‘V’,‘I’,‘D’):MPEG-4编码类型,视频大小为平均值,文件扩展名.avi,可指定结果视频的大小
cv2.VideoWriter_fourcc(‘T’,‘H’,‘E’,‘O’):OGGVorbis,音频压缩格式,有损压缩,类似于MP3等的音乐格式。兼容性差,件扩展名.ogv。
cv2.VideoWriter_fourcc(‘F’,‘L’,‘V’,‘1’):该参数是Flash视频,文件名后缀为.flv
等等
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc('I', '4', '2', '0')
out = cv2.VideoWriter(r'./output.avi', fourcc, 20.0, (640, 480), True)
while cap.isOpened():
ret, frame = cap.read()
if ret is True:
frame = cv2.resize(frame, (640, 480))
out.write(frame)
cv2.imshow('frame', frame)
else:
break
key = cv2.waitKey(10)
if key == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
GitHub Opencv简单使用