rgb分别代表红绿蓝
安装
pip install opencv-contrib-python
需要导入的包
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
读取图片
- 读取图像
img = cv.imread(filepath,flags)
filepath:要读入图片的完整路径
flags:读入图片的标志
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道,可以直接写1
cv2.IMREAD_GRAYSCALE:读入灰度图片,可以直接写0
cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道,可以直接写-1
打印图片结果:
是一个三维矩阵,从外到内依次是:
- 存储每一行,即高
- 存储着一行的每个像素点,即宽
- 每一个像素点的三原色BGR,即点
- 显示图片
# 设置显示图片的标题
cv.imshow('image',img)
# 它显示指定的图像的毫秒时间。waitKey(0)将无限地显示窗口,直到任何按键按下。
cv.waitKey(0)
# 如果未取消分配任何相关的内存使用量,则调用将负责取消分配。
cv.destroyAllWindows()
图片属性
名称 | 说明 |
---|---|
size | 图片大小,占用大小 |
nbytes | 占用内存 |
shape | 形状 |
data | 数据流 |
shape | 表示行数列数通道数 |
读取视频
import cv2 as cv
vide = cv.VideoCapture(路径/设备)
while vide.isOpened():
ret,frame = vide.read()
cv.imshow('frame',frame)
if cv.waitKey(100) & 0xFF == ord('q'):
break
- 读取视频
vc = cv.VideoCapture(路径/设备)
1.是从文件(.MPG或.AVI格式)中读取视频,对象创建以后,OpenCV将会打开文件并做好准备读取它
2.从摄像机中读取视频,这种情况下,我们会给出一个标识符,用于表示我们想要访问的摄像机。
对于摄像机而言,这个标志符就是一个标志数字,如果只有1个摄像机,那么就是0,如果系统中有多个摄像机,那么只要将其向上增加即可。
- 判断视频读取或者摄像头调用是否成功
cv.isOpen()
# 成功则返回true。
- 读取一帧
# 返回其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。
# frame当前这一帧的图像
ret,frame = vide.read()
- 等待
# 和上面一样是毫秒值,用于控制视频播放速度
# 太大会卡顿,太小会飞快
cv.waitKey()
- 释放
调用 vc.release() 释放摄像头
调用 cv2.destroyAllWindows() 关闭所有图像窗口。
截取图片
我们知道图像对象是由三维矩阵所构成。
我们可以对图像进行切片
img = cv.imread()
img = img[y开始:y结束,x开始:x结束]
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()
颜色
颜色的提取
注意顺序都不能错,一定是bgr,而不是rgb
b,g,r = cv.split(img)
print(b)
split可以将图片的三原色分开进行处理
也可以进行合并
img=cv.merge(b,g,r)
只保留某颜色
可以把其他颜色置为0就可以了
保留r
img[:,:,0]=0
img[:,:,1]=0