介绍:强大的视觉处理工具库
一、 图片处理
图片读取&显示&存储
-
cv2.imread(filename, flags=None)
读入图片,格式为ndarry
flags
:读入类型
cv2.IMREAD_COLOR
:默认参数,读入一副彩色图片,忽略alpha通道
cv2.IMREAD_GRAYSCALE
:读入灰度图片
cv2.IMREAD_UNCHANGED
:读入完整图片,包括alpha通道(png有,jpg无) -
cv2.imshow('wind_name', img)
在wind_name
窗口中显示图片 -
cv2.waitKey()
窗口等待任意键盘按键输入,0为一直等待,其他数字为毫秒数 -
cv2.destroyAllWindows()
销毁窗口,退出程序 -
cv2.imwrite(filename, img, params=None)
将img
存入filename
中
添加图形&文本
参考:www.cnblogs.com/mfmdaoyou/p/6745132.html
-
cv2.line(img,Point pt1,Point pt2,color,thickness=1,line_type=8 shift=0)
绘制直线
pt1
和pt2
为线的两端,颜色color
,粗细thickness
,shift=-1
表示对图形进行填充 -
cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
绘制矩形
pt1
和pt2
为左上角和右下角 -
cv2. circle(img, center, radius, color, thickness=None, lineType=None, shift=None)
绘制圆
圆中心center
和半径radius
-
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)
绘制椭圆
-
cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)
绘制多边形
pts
: 多边形各顶点坐标
isClosed
: 多边形是否闭合 -
cv2.putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)
添加文本
org
:左上角坐标
fontFace
:字体, 可选cv2.FONT_HERSHEY_SIMPLEX
fontScale, color, thickness
:字体大小/颜色/粗细
图像变换
参考:
https://blog.csdn.net/qq_37541097/article/details/79999902
-
cv2.cvtColor(src, code, dst=None, dstCn=None)
颜色空间转换
code
:转换类型,常用如cv2.COLOR_BGR2RGB
,cv2.COLOR_BGR2GRAY
,cv2.COLOR_BGR2HSV
-
_, mask = cv2.threshold(src, thresh, maxval, type, dst=None)
灰度图二值化
src
,thresh
,maxval
: 灰度图,阈值,最大值
type
:阈值类型,常见的类型有
- 旋转图像
M = cv2.getRotationMatrix2D((width/2, height/2), angle, scale)
ratation = cv2.warpAffine(image, M, (width, height))
M为旋转矩阵,第一个参数是设定旋转中心,第二个参数是旋转角度(单位是度,逆时针为正),第三个参数是缩放比例
参考:https://blog.csdn.net/weixin_35732969/article/details/83779660
-
cv2.resize(im, (width, height), interpolation)
图像缩放
(width, height)
,interpolation
:缩放后图像大小, 插值类型
二、 视频处理
参考:https://blog.csdn.net/qq_37541097/article/details/79999902
import cv2
import numpy as np
cap = cv2.VideoCapture('video.mp4') # 打开视频文件
if cap.isOpened() is False: # 确认视频是否成果打开
print('Error')
exit(1)
frame_width = int(cap.get(3)) # 获取图片帧宽度
frame_height = int(cap.get(4)) # 获取图像帧高度
# 创建保存视频,指定保存视频名称,指定视频编码器,视频帧率,图像帧尺寸
out = cv2.VideoWriter('output.avi', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 30, (frame_width, frame_height))
ret, frame = cap.read() # 读取一帧图像,当视频帧读取完毕ret标识符为False
while ret:
cv2.imshow('frame', frame) # 显示图像帧
cv2.waitKey(20) # 帧间隔为20ms
frame = cv2.flip(frame, 0) # 对图像进行水平翻转
out.write(frame) # 将frame写入视频
ret, frame = cap.read() # 读取下一帧
cap.release()
out.release()