课程目标
- 安装 OpenCV
- OpenCV 读取、缩放、翻转、写入图像
- OpenCV 在图像上绘制文字、几何图形
- OpenCV 视频操作
认识openCV
OpenCV(Open Source Computer Vision) 是计算机视觉和机器学习软件库
Intel 1999年 创建,用C++语言编写 (提供了Python、Ruby、MATLAB等接口),OpenCV 支持对图像缩放、旋转、绘制文字图形等基础操作
OpenCV 库包含了很多计算机视觉领域常见算法: 目标检测、目标跟踪等.
如何安装openCV
安装
conda install -c conda-forge opencv
conda install opencv
(换源后)或pip install opencv-python
检查是否安装成功:
OpenCV 读取、缩放、翻转、写入图像
进入jupyter-lab,代码如下:
读取图片
缩放图片
翻转图片
写入图片
openCV绘制图形和文字
创建一个纯黑色的底图
画一个矩形
再画一个正方形
再画一个圆形
再画一个实心圆
画一条线
画多边形
在真实的图片上加载图形
在真实的图片上加载文字
字体包位置:
写个文字的工具方法:
# 导入PIL对应包 import cv2 from PIL import Image, ImageDraw, ImageFont import numpy as np # 绘制中文 def cv2AddChineseText(img, text, position, textColor=(0, 255, 0), textSize=30): img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) draw = ImageDraw.Draw(img) # 字体的格式 fontStyle = ImageFont.truetype( "./../font/simsun.ttc", textSize, encoding="utf-8") # 绘制文本 draw.text(position, text, textColor, font=fontStyle) # 转换回OpenCV格式 return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
OpenCV 视频操作
演示在python的窗口中显示图片
# 演示在python的窗口中显示图片 # 导入opencv import cv2 import numpy as np # 读取图片 img = cv2.imread('./../img/cat.jpg') # 显示图片 while True: cv2.imshow('Demo',img) # 等待10毫秒 ,如果等待至少10ms,并且用户按了ESC键 (ord('')) #if cv2.waitKey(10) & 0xFF == 27: if cv2.waitKey(10) & 0xFF == ord('q'): break # 关闭所有的窗口 cv2.destroyAllWindows()
OpenCV读取摄像头视频流, 并且显示
""" OpenCV读取摄像头视频流, 并且显示 """ # 导入OpenCV import cv2 import numpy as np #调用摄像头 cap = cv2.VideoCapture(0) while True: # 返回frame rec,frame = cap.read() # 镜像 frame = cv2.flip(frame, 1) # 灰度显示 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 显示画面 cv2.imshow('Demo', frame) #退出条件: q if cv2.waitKey(10) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
OpenCV读取视频文件
""" OpenCV读取视频文件 """ # 导入opencv的包 import cv2 import numpy as np # 读取文件 cap = cv2.VideoCapture('./../video/myDemo.mp4',0) if not cap.isOpened(): print('文件不存在或者编码错误') while cap.isOpened(): # 读取每一帧 ret, frame = cap.read() if ret: # 显示画面 cv2.imshow('Demo', frame) #退出条件 if cv2.waitKey(10) & 0xFF == ord('q'): break else: # 画面播放完毕,自动退出 break cap.release() cv2.destroyAllWindows()
OpenCV读取摄像头视频流, 并且显示和保存为mp4文件
""" OpenCV读取摄像头视频流, 并且显示 保存为mp4文件 """ # 导入OpenCV import cv2 import numpy as np #调用摄像头 cap = cv2.VideoCapture(0) #编码 #DIVX,X264 fourcc = cv2.VideoWriter_fourcc(*'X264') fps = 20 # 获取摄像头实际大小 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) writer = cv2.VideoWriter('../video/myDemo.mp4',fourcc,fps,(width,height)) while True: # 返回frame rec,frame = cap.read() # 镜像 frame = cv2.flip(frame, 1) # 灰度显示 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 写入画面到文件 writer.write(frame) # 显示画面 cv2.imshow('Demo', frame) #退出条件: q if cv2.waitKey(10) & 0xFF == ord('q'): break writer.release() cap.release() cv2.destroyAllWindows()
OpenCV在摄像头视频流上添加文字和图形
""" OpenCV在摄像头视频流上添加文字和图形 """ # 导入opencv等包 import cv2 import numpy as np import time # 导入自定义模块 import drawUtils # 读取摄像头 cap = cv2.VideoCapture(0) # 当前Unix时间戳 start_time = time.time() while True: # 读取每一帧 ret, frame = cap.read() # 对frame进行操作 frame = cv2.flip(frame, 1) # 画一个矩形 cv2.rectangle(frame, (20,200),(120,300),(255,0,255),10) now = time.time() fps_text = int(1/( now - start_time)) start_time = now frame_text = "帧率: " + str(fps_text) # print(fps_text) #显示帧率 frame = drawUtils.cv2AddChineseText(frame, frame_text, (20,50),(0,255,0),30) # 显示画面 cv2.imshow('Demo', frame) #退出条件 ESC if cv2.waitKey(10) & 0xFF == 27: break cap.release() cv2.destroyAllWindows()
效果如下:
本人太帅,打码了哈哈。
大功告成!!!