2.图像的加载与保存

学习视频可参见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),这些元素就称为像素

image-20201104103017413

2.图像信息获得

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)

结果输出

图像类型: <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.彩色图转灰度图

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

原图与灰度图对比:

image-20201104103038093

4.获取视频

# 获取视频
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.视频保存

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中读取的视频是没有声音的

结语

以上内容仅是自我学习时记录的笔记,欢迎大家批评指正,一起学习进步。迎大家关注我的公众号小郭学数据在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值