第二章:视频图片的操作
二、读取保存图片以及视频。
2.1 读取一张图片
- 1 .代码以及讲解
# date:2021/11/29
# author:冯耿鑫
# 导入库,后面其实就是调用这个库里面的函数
import cv2 as cv
# 读取图片的几种方法(其中\\可以用/代替,效果一样的,个人比较喜欢用相对路径以及\\进行读取图片)
# 相对路径赌气图片,其中.\\1.jpg为当前目录下的一张命名为1.jpg的图片
# img = cv.imread(".\\1.jpg")
# 绝对路径读取图片
img = cv.imread("F:\\code\\anaconda_environment\\CSDN\\img_video\\1.jpg")
# 创建一个窗口名为img的窗口,0或者cv.WINDOW_NORMAL表示可以缩放窗口大小
cv.namedWindow("img",0)
# 显示图片,创建的窗口名要跟图片窗口名字一样。
cv.imshow("img",img)
# 参数0表示程序停止在改行代码上,如果是n,就是延迟n ms之后执行下一条指令
cv.waitKey(0)
# 读取图片后并关闭之后要释放内存
cv.destroyAllWindows()
-
2.读取效果
2.2 numpy创建图片
2.3 批量读取图片
- 1.批量操作介绍:
这里先提前简单说一下批量读取图片,大家可以代码进行简单修改读取文件或者其他格式的图片(.bmp,.jpeg等等)。后期我就会在新的章节中对批量操作进行新的介绍。
在深度学习当中,一般都需要根据应用场景去制作数据集,需要用到很多图片的批量命名,数据增强,将标注好的数据集扩展更多的数量,这种情况就需要用到批量读取图片。同样批量读取也能应用在办公自动化上,对excel文件进行批量操作,提高工作效率。
下面代码的功能就是一次性读取指定文件下面的所有.jpg,.png格式的图片。 - 2.代码展示
# date:2021//11/30
# author:仲恺农业工程学院 冯耿鑫
import cv2 as cv
import os
path = ".\\img"
for filename in os.listdir(path):
# 读取改文件下的所有文件以及文件夹
if any(filename.endswith(extension) for extension in ['.jpg', '.png']) == True:
# 文件的扩展名是否在列表里面,列表的格式是我们需要的格式,如果是就进行读取。
# 读取所需要格式的图片
img = cv.imread(path+"\\"+filename)
# 打印图片读取路径
print(path+"\\"+filename)
# 创建窗口,窗口名大家全部设置为"img",因为路径不一样,文件里面刚好有6张图片,到时候都会显示出来。
cv.namedWindow(path + "\\" + filename, 0)
cv.imshow(path+"\\"+filename,img)
# 延时显示
cv.waitKey(1000)
# 释放窗口之后就不会生产6张图片,而是显示一张释放一张。
# cv.destroyAllWindows()
# 为了所有图片显示后不退出,将程序停止在这一行
cv.waitKey(0)
- 3.效果图片
![](https://i-blog.csdnimg.cn/blog_migrate/82004b59e102eeb7a29ead2d7f0f474d.jpeg)
2.4 读取视频
- 2.4.1 下面展示一些
打开相机代码
。
import cv2 as cv # 导入cv2库,为了后面敲代码方便,简称为cv
def openCamera():
"""定义一个函数,用来打开相机"""
cap = cv.VideoCapture(0) # 创建一个对象,参数0为打开外部相机,1是电脑自带相机,大家可以0/1切换试试
while (cap.isOpened()):
ret,frame = cap.read() # ret:布尔值,False为关闭相机、True为关闭相机
#===========下面可以利用获取的图片进行图像处理===============
frame = cv.flip(frame,1)
"""
horizontal = cv.flip(img,1,dst=None) #水平镜像
vertical = cv.flip(img,0,dst=None) #垂直镜像
cross = cv.flip(img,-1,dst=None) #对角镜像
"""
cv.namedWindow("frame",0) # 定义一个窗口,0或cv.WINDOW_NORMAL为可以鼠标自动缩放窗口大小
cv.imshow("frame",frame) # 显示图片,注意窗口名以及图片显示名要一样,不然就是两个弹窗。同时不能缩放
if cv.waitKey(1)& 0xFF == 27:
# 每一帧延迟1ms,27表示esc键,检测到esc时可以关闭窗口,除来27也可以设置 : ord('') 单引号其他字母参数,如:cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release() # 退出之后释放内存
if __name__ == '__main__':
# 只有运行当前程序的时候才会调用以下函数
openCamera()
- 2.3.2 下面展示一些
效果
。