1. 图像的读取(使用jupyter)
(1)opencv读取图像:( 彩色图像: cv2.IMREAD_COLOR,灰度图像:cv2.IMREAD_GRAYSCALE)<0---255>
import cv2
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inlineimg = cv2.imread('cat.jpg')
img.shape # (440, 500, 3)
img有三个维度,(h,w,c),opencv默认的读取格式为BGR,不是RGB格式。最好用opencv自带的工具包展示。
(2)图像的显示,也可以创建多个窗口。
cv2.imshow('image', img) # 窗口显示,也可以创建多个窗口
cv2.waitKey(0) # 等待时间,毫秒级。0代表任意键(随便按任意键)终止。cv2.waitKey(1000)代表显示1000毫秒自动触发关闭,所有窗口关闭。
cv2.destoryAllWindows() # 触发关闭,所有窗口关闭。
调用函数方式:
def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)cv2.destoryAllWindows()
(3)原始图像是彩色的,如果我想读取灰度图像(灰度图和彩色图的转换),则使用如下代码:
img = cv2.imread('cat.jpg', cv2.IMREAD_GRAYSCALE)
img.shape # (414, 500)
(4)图像的保存:
cv2.imwrite('mycat.png', img) # True
(5)其余操作
type(img) # numpy.ndarray
img.size # 207000
img.dtype # dtype('uint8')
二:视频的读取
cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备。例如0,1
如果是视频文件,直接指定路径即可。视频也是由图像一帧一帧组成。
对视频操作就是把视频拆分成每一帧(图像),对每一帧(图像)进行操作。
vc = cv2.VideoCapture('test.mp4')
查看读取的视频能不能打开。vc.read()读取第一帧,再vc.read()读取第二帧,再 vc.read()读取第三帧。open就是是否读进来,frame就是读取的每一帧(图像),就是一中的图像。
if vc.isOpened():open, frame = vc.read()
else:open = False
我现在想要看test.mp4的灰度视频,需要用opencv执行一下操作:
(1):读取每一帧图片,为空停止。
(2):每读取一张图像,就把图像转化为灰度图。cv2.cvtColor(frame, cv2.COLOR_BGR_BGR2GRAY)
(3):连贯--->读取一帧图片,转化为灰度图,展示出来,然后展示XXX毫秒,读取第二帧图像,转化为灰度图,展示出来,然后展示XXX毫秒,读取第三帧图像,转化为灰度图,展示出来。。。。读取图像为空,结束。销毁窗口。
while open: # 只要能打开 open == Trueret, frame = vc.read()if frame is None:breakif ret == True:gray = cv2.cvtColor(frame, cv2.COLOR_BGR_BGR2GRAY)cv2.imshow('result', gray)if cv2.waitKey(10) & 0xFF == 27: # 27表示我们的退出键(直接退出,销毁窗口)break
vc.release() # 释放硬件资源
cv2.destoryAllWindows()