文章目录
数据读取–图片
读取
每一张图像的最小组成部分就是像素点,他是由很多个像素点组成的,每个像素点的范围是0-255,(0是黑色,亮度最暗,255是白色,亮度最亮)
RGB三色彩空间,一般的图片都是三通道的,可以把它看做是用一个三层矩阵表示,对应的不同像素点在三个颜色通道都会有一个对应的值
import cv2 as cv #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt
#想在绘图完成之后,直接生成,不需要调用show()
%matplotlib inline
img = cv.imread('1.jpg')
读取参数是:图片名,会在当前目录下进行搜索
读取之后得到的结果是:一个三通道的numpy的数组形式
看形状:
img.shape
这是对应的结果:
(400, 400, 3)
注意:
1.形式是【h,w,c】的形式
2.Opencv和PIL对于三通道的读取顺序是有区别的。opencv读取的格式是BG,RPIL(python的图像处理库)是使用RGB打开
展示
#图像的显示,也可以创建多个窗口
cv.imshow('image',img)
#等待/消失时间,毫秒级,0表示任意键终止,不自动终止
cv.waitKey(0)
cv.destroyAllWindows()
在这里呢,有两个点要记:
1.cv.waitKey(0)
这里表示是图片的展示/消失时间,如果参数为0,那么表示按任意键自动退出,如果不为0,那么参数就是自己设定的时间,毫秒级别
2.cv.destroyAllWindows()
官方回答:
您可以调用destroyWindow()或destroyAllWindows()来关闭窗口并取消分配任何相关的内存使用。对于一个简单的程序,实际上不必调用这些函数,因为退出时操作系统会自动关闭应用程序的所有资源和窗口
通俗来讲也就是说:
如果之前没有释放掉内存的操作的话destroyallWIndows会释放掉被那个变量占用的内存
我们把整个图片展示的内容聚合成一个函数:
def cv_show(name,img):
cv.imshow(name,img)
cv.waitKey(0)
cv.destroyAllWindows()
这样在之后的图片展示的时候,直接使用该函数即可
灰度化
img2 = cv.imread('1.jpg',cv.IMREAD_GRAYSCALE)
cv2 IMREAD_COLOR 彩色图像
cv2 IMREAD_GRAYSCALE 灰度图像
我们可以展示图片来观察一下图片的区别:
img是初始图片,他是三通道的彩色图片,而img2是经过灰度化处理的图片,他只有一个通道,只需要亮度来进行表达就行。
此时查看img2的shape
img2.shape
所得结果:
(400, 400)#只有[h,w],没有了c
保存
cv.imwrite('1_gray.jpg',img2)
看图片类型
cv.imwrite('1_gray.jpg',img2)
这个是结果:
numpy.ndarray
看图片像素点的个数
img.size
这个是结果:
480000
看图片对应矩阵每个值的范围
img.dtype
这个是结果:
dtype('uint8')
数据读取–视频
vc = cv.VideoCapture('1.mp4')
#检查是否打开正确
if vc.isOpened():
open,frame = vc.read()
else:
open = False
while open:
#参数:ret:当前帧是否正确读入,frame:每一帧图像对应的三通道矩阵
ret,frame = vc.read()
if frame is None:
break
if ret == True:
gray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
cv.imshow('result',gray)
#可以设置让他等待多长时间,或者自动退出,可以设置关闭的按键,27对应的是退出键
if cv.waitKey(10) % 0xFF == 27:
break
vc.release