图像读写、属性
一、图像读写
1、读取 imread
imread(filename[, flags]) -> retval
flags 相关参数
-
cv2.IMREAD_COLOR:彩色图像
-
cv2.IMREAD_GRAYSCALE:灰度图像
-
0,8位深度,1通道;
-
1,8位深度,3通道;
-
2,原深度,1通道
-
3,原深度,3通道;
-
4,8位深度,3通道;
-
-1
,8位深度,原通道;
无论哪种模式, imread 会删除透明通道(alpha 通道);
import cv2 # opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
# 读取
img=cv2.imread('dj.jpg')
读取为灰度图
# 设置读取方式为灰度图
img=cv2.imread('dj.jpg', cv2.IMREAD_GRAYSCALE)
img.shape # (H, W)
# (200, 200)
img
array([[64, 64, 64, ..., 87, 87, 87],
[64, 64, 64, ..., 87, 87, 87],
[64, 64, 64, ..., 87, 87, 87],
...,
[62, 62, 62, ..., 83, 83, 83],
[62, 62, 62, ..., 82, 83, 83],
[62, 62, 62, ..., 82, 83, 83]], dtype=uint8)
img1=cv2.imread('dj.jpg', 0) # 设置为0,代表读取为单通道
2、保存 imwrite
imwrite(filename, img[, params]) -> retval
- filename:文件名字
- retval 返回布尔值,表示存储成功与否
ret = cv2.imwrite('hi.jpg' ,img)
print(ret)
3、展示 imshow
imshow 查看
imshow(winname, mat) -> None
- winname:给显示窗口取的名字
- mat:读取出来的图像举证
如果只是 imshow,则会一闪而过;
设置 waitKey 等待时间,显示图片延迟时间,以 ms 为单位;设置为 0,表示不消失,让用户操作任意键来终止;
cv2.waitKey(2000) # 2s 内消失
waitKey 有返回值,返回任意键的 ascii 编码值;
如果指定时间内没有按下任何按键,程序继续执行;
也可以创建多个窗口;
Mac 上窗口可能在后方;
# 图像的显示,
cv2.imshow('title',img)
# 等待时间,毫秒级,0表示任意键终止
# cv2.waitKey(0)
ret = cv2.waitKey(2000) # 2s 内消失
print(ret)
cv2.destroyAllWindows()
# 封装方法来显示图片
def cv_show(img):
cv2.imshow('w name',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#图像的显示,也可以创建多个窗口
cv2.imshow('image',img)
# 等待时间,毫秒级,0表示任意键终止
cv2.waitKey(10000)
cv2.destroyAllWindows()
4、图片属性
图片读取后本质是矩阵;灰度图是二维,彩色图是三维
img.size # 像素点的个数
img
array([[[ 53, 52, 91],
[ 53, 52, 91],
[ 53, 52, 91],
...,
[[ 51, 50, 89],
[ 51, 50, 89],
[ 51, 50, 89],
...,
[ 66, 66, 120],
[ 67, 67, 121],
[ 67, 67, 121]]], dtype=uint8)
img.shape
# (200, 200, 3)
height, width, n = img.shape
print(height, width, n)
# 200 200 3
type(img)
# numpy.ndarray
img[0][0]
# array([53, 52, 91], dtype=uint8)
type(img)
img.dtype # 数据类型
二、视频读取
视频也是由图像组成的;是一帧一帧静止的图像组成的;
读取视频文件后,还是会拆分为每一帧,对每一帧做操作。
- cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
- 如果是视频文件,直接指定好路径即可。
vc = cv2.VideoCapture('djm.mp4')
# 检查是否打开正确
if vc.isOpened():
open, frame = vc.read()
# open 代表是否能打开;frame 代表当前这一帧的图像 ;vc.read() 一次读取一帧
else:
open = False
# 遍历每一帧
while open:
ret, frame = vc.read()
if frame is None:
break
if ret == True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转化为灰度图
cv2.imshow('result', gray)
# 每等 100ms 下一帧;27 表示退出键;
if cv2.waitKey(100) & 0xFF == 27:
break
vc.release()
cv2.destroyAllWindows()