前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV基础 | 2.图像,视频的加载与保存

OpenCV基础 | 2.图像,视频的加载与保存

作者头像
快学Python
发布2021-08-09 10:16:57
9910
发布2021-08-09 10:16:57
举报
文章被收录于专栏:快学Python

作者:小郭学数据

源自:快学python

学习视频可参见python+opencv3.3视频教学 基础入门

今天写的是图像,视频的加载与保存

1.图像,数字图像,像素

1.图像

  • 图像:定义为二维函数f(x,y),其中,x,y是空间坐标,f(x,y)是点(x,y)的幅值
  • 灰度图像:是一个二维灰度(或亮度)函数f(x,y)
  • 彩色图像:由三个(如RGB,HSV)二维灰度(或亮度)函数
    • RGB:R,红,G,绿,B,蓝
    • HSV:H,色调,S,饱和度,V:明度

2.数字图像

  • 数字图像:像素组成的二维排列,可以用矩阵表示
  • 单色(灰度)图像:每个像素的亮度用一个数值来表示,通常数值范围在0-255,0表示黑,255表示白,其它值表示处于黑白之间的灰度
  • 彩色图像:用红,绿,蓝三元组的二维矩阵表示,通常,三元组的每个数值也是在0-255之间,0表示相应的基色在该像素中没有,255则代表相应的基色在该像素中取得最大值

3.像素

数字图像由二维元素组成,每一个元素具有一个特定位置(x,y)和幅值f(x,y),这些元素就称为像素

2.图像信息获得

代码语言:javascript
复制
def get_image_info(image):
    print("图像类型:",type(image))
    print("图像长x宽x通道数:",image.shape)
    print("图像长宽通道数相乘所得值:",image.size)
    print("图像像素值类型:",image.dtype)
    pixel_data = np.array(image)  # 将图片转换成数组
    print("像素大小:", pixel_data)

结果输出

代码语言:javascript
复制
图像类型: <class 'numpy.ndarray'>
图像长x宽x通道数: (512, 512, 3)
图像长宽通道数相乘所得值:786432
图像像素值类型:uint8
像素大小: [[[128 138 225]
  [127 137 224]
  [126 136 223]
  ...
  [ 81  68 178]
  [ 83  71 183]
  [ 84  74 188]]]

3.彩色图转灰度图

代码语言:javascript
复制
def save_image(image):
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) # 将image图片转换成灰度图
    cv.imwrite("huidu.png",gray)  #将转换后的图片保存为huidu.png
    cv.imshow("gray",gray)

原图与灰度图对比:

4.获取视频

代码语言:javascript
复制
# 获取视频
def video_demo():
    capture = cv.VideoCapture(0) #0指笔记本的内置摄像头,可以设置成1或其他的来选择成别的摄像头
    print("类型",type(capture))
    while True:
        ret, frame = capture.read()  # 获取相机图像,返回ret(结果为True/False),和每一帧图片
        frame = cv.flip(frame, 1)  # 将图片水平翻转,竖直翻转为0
        print('1', ret)  # 打印出ret值
        cv.imshow("video", frame)  # 将每一帧图片放入video窗口
        c = cv.waitKey(50) # 等有键输入(这里指c=Esc键)或者50ms后自动将窗口消除
        if c == 27: #如果按esc退出的话,这里必须是等于27,27是esc的ASCLL十进制表示
            break

5.视频保存

代码语言:javascript
复制
def save_video():
    cap = cv.VideoCapture(0)
    #FourCC是用于指定视频编解码器的4字节代码
    #在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2。(最好使用XVID。MJPG会生成大尺寸的视频。X264会生成非常小的尺寸的视频)
    #在Windows中:DIVX(尚待测试和添加)
    #在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)。
    fourcc = cv.VideoWriter_fourcc('D', 'I','V', 'X')
    # 参数说明:输出视频名称,编码格式,播放频率,帧的大小
    out = cv.VideoWriter("../images/xiaoguo.avi", fourcc, 50.0, (640, 480))
    while cap.isOpened(): # 你可以使用 cap.isOpened(),来检查是否成功初始化了
        ret, frame = cap.read()
        if ret is True:
            out.write(frame)
            cv.imshow('frame', frame)
            if cv.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break

    cap.release()
    out.release()
  • cv.waitKey(1) & 0xFF == ord('key'):
    • 功能:若键盘输入'key',视频停止录制并保存
    • 参数:1:表示延时1ms切换到下一帧图像,对于视频而言;0:只显示当前帧图像,相当于视频暂停;key:要输入键盘的键
    • 返回值:ord(' ')将字符转化为对应的整数(ASCII码)
  • 科普
    • 视频中每一帧代表一幅图像
    • 帧的大小也就是图像的的大小即图像的宽,高

OpenCv中读取的视频是没有声音的

结语

以上内容仅是自我学习时记录的笔记,欢迎大家批评指正,一起学习进步。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 快学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.图像,数字图像,像素
    • 1.图像
      • 2.数字图像
        • 3.像素
        • 2.图像信息获得
        • 3.彩色图转灰度图
        • 4.获取视频
        • 5.视频保存
        • 结语
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档