学习知识最好从官方文档中学习:Opencv官方教程
一、图片操作
1.1 导入图片
代码展示:
# 导入 opencv-python
import cv2
# 读入本地文件 使用的相对路径
img = cv2.imread('logo.png')
# 在窗口中显示图像
cv2.imshow('Display Window',img)
# 获取按键动作 按下s键 将图像保存本地
# 0表示永久等待键盘按键 15 表示15毫秒检测一次按键
k = cv2.waitKey(0)
if k == ord('s'):
cv2.imwrite('saved_img.png',img)
cv2.destoryAllWindows()
为什么导入的图片背景是白色,保存的时候是黑色?
cv2:存储的图片格式是bgr 白色会变为黑色
1.2 检验导入图片
1.3 步骤摄像头画面
代码如下(示例):
# 获取、处理、展示摄像头捕获的画面
# 2021-03-06
# 导入 opencv-python
import cv2
# 捕获摄像头,传入摄像头索引号,默认 摄像头索引为0; 也可以传入视频文件
# 一般的电脑就是默认的摄像头
cap = cv2.VideoCapture(0)
# 校验摄像头是否捕获成功,如果未成功则输出提示
if not cap.isOpened():
print('open cap error!')
exit()
# 无限循环
while True:
# 获取摄像头捕获的画面 返回ret和frame
# ret 的True/False 反应是否捕获成功,frame 是画面
ret , frame = cap.read()
# 校验画面真是否正确捕获,如果未成功则输出提示,跳出循环
if not ret :
print('无法获取画面帧')
break
# 对画面帧进行处理
# 这里是将画面帧转化为灰度图
gray = cv2.cvtColor(frame,cv2.OLOR_BGR2GRAY)
# 窗口中显示处理之后的画面
cv2.imshow('frame_window',gray)
# 获取键盘按键动作 如果按下q键 就跳出循环
if cv2.waitKey(1) == ord('q'):
break
# 关闭摄像头
cv2.release()
# 关闭所有窗口
cv2.destoryAllwindows()
(我的也可以运行,就不在此展示截图了)
1.4 处理本地视频文件
代码如下(示例):
import cv2
# 捕获摄像头,传入摄像头索引号,默认 摄像头索引为0; 也可以传入视频文件
# 一般的电脑就是默认的摄像头
cap = cv2.VideoCapture('test.mp4')
# 校验摄像头是否捕获成功,如果未成功则输出提示
if not cap.isOpened():
print('open cap error!')
exit()
# 获取视频的宽、高信息,cap.get()传入的参数可以是0-18的整数,也可以设置宽高等参数信息
print('WIDTH',cap.get(3))
print('HEIGHT',cap.get(4))
# 无限循环
while True:
# 逐帧获取视频画面 返回ret和frame
# ret 的True/False 反应是否捕获成功,frame 是画面
ret , frame = cap.read()
# 校验画面真是否正确捕获,如果未成功则输出提示,跳出循环
if not ret :
print('无法获取画面帧')
break
# 对画面帧进行处理
# 这里是将画面帧转化为灰度图
gray = cv2.cvtColor(frame,cv2.OLOR_BGR2GRAY)
# 窗口中显示处理之后的画面
cv2.imshow('frame_window',gray)
# 获取键盘按键动作 如果按下q键 就跳出循环
# 25ms是恰好的,如果太小,播放速度会很快如果太大 播放速度会很慢
if cv2.waitKey(25) == ord('q'):
break
# 关闭视频文件
cap.release()
# 关闭所有窗口
cv2.destoryAllwindows()
运行结果:
最后为什么会输出无法获取画面帧?
答:视频处理到最后一帧,ret返回false
1.5 保存视频
# 保存处理后的视频
# 2021 03 06
import numpy as numpy
import cv2 as cv
# 获取摄像头
cap = cv.VideoCapture(0)
# 指定VideoWritter的fourCC视频编码
# fourCC视频编码:视频数据格式
fourcc = cv.VideoWriter_fourcc(*'DIVX')
# 指定输出文件、 fourCC视频编码、FPS帧率、画面大小
out = cv.VideoWriter('output.avi',fourcc,20.0,(640,480))
while cap.isOpened():
ret,frame = cap.read()
if not ret:
print('无法打开摄像头')
break
# 对画面帧进行处理 这里是将画面帧翻转 flip:即翻转
frame = cv.flip(frame,0)
# 将处理后的画面逐帧保存至output文件中
out.write(frame)
#将处理后的画面助阵显示在窗口中
cv.imshow('frame',frame)
if cv.waitKey(1) == ord('q'):
break
# 关闭摄像头 视频保存器 窗口
cap.release()
out.release() #关闭视频保存器 这个很重要
cv.destroyAllWindows()
二、⭐实战–车辆识别
这个实战涉及了卷积神经网络的知识,以我目前的知识水平无法理解其中的代码以及处理过程,我没有听懂,故在此不做展示,以后达到一定说平,会及时补上。(需要该实战的代码可以留言)