介绍:强大的视觉处理工具库
一、 图片处理
图片读取&显示&存储
-
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/liangjiubujiu/article/details/80437481插值类型
二、 视频处理
参考: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()


