zoukankan      html  css  js  c++  java
  • opencv 图片读取和视频读取(一)

    环境搭建

    一 图片读取

    1代码

    import cv2 as cv
    #读取图片
    src=cv.imread('./yiner.jpg')
    #cv.WINDOW_AUTOSIZE 表示自动窗口
    cv.namedWindow('赵丽颖',cv.WINDOW_AUTOSIZE)
    #图片显示窗口
    cv.imshow('赵丽颖',src)
    #参数0表示一直显示,直到键盘按下一个数字键就消失
    cv.waitKey(0)
    #删除所有的图片窗口
    cv.destroyAllWindows()

    2 图片读取函数解说

    •  imread( filename,int flags);  读取图片
    flags:0和2表示灰色
    
         其他值表示彩色
    • cv.NamedWindow( name, int flags ); 创建windows窗口
    参数1:窗口名字
    
    参数2:窗口的显示方式
    
       可选类型有:
            为0或cv.WINDOW_NORMAL:可以改变窗口大小
            不写或cv.WINDOW_AUTOSIZE : 则不可改变大小,显示原图片大小
    •  imshow(winname, InputArray mat)  显示图片窗口
    参数1:图片窗口名字
    参数2:需要显示图片(numpy数组)
    • waitKey(K) 窗口显示时间,单位:毫秒  
    k=0 : 无限期的等待键盘输入。
    • cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删除的窗口名
    • cv2.imwrite(filenameInputArray mat)   保存图片
    参数1:图片保存的路径
    参数2:表示图片的数组(src).

    3 图片属性

    import cv2 as cv
    import numpy as np
    
    #输出图片的属性
    def get_image_info(image):
        print(type(image)) #显示图片数据类型为numpy类型
    
        # 图像矩阵的shape属性表示图像的大小,shape会返回tuple元组,
        # 第一个元素表示矩阵行数,第二个元组表示矩阵列数,第三个元素是3,
        # 表示像素值由光的三原色组成
        print(image.shape)
        print(image.size)#图像大小
        print(image.dtype)
        pixel_data=np.array(image)
        print(pixel_data)#图片矩阵
    
    src=cv.imread('./yiner.jpg')
    cv.namedWindow('颖儿',cv.WINDOW_AUTOSIZE)
    cv.imshow('赵丽颖',src)
    get_image_info(src)
    cv.imwrite('yiner2.jpg',src) #图片另存为
    cv.waitKey(0)
    cv.destroyAllWindows()

     二 视频读取

    1 代码

    # -*- coding=GBK -*-
    import cv2 as cv
    
    # 打开摄像头获取图片
    def video_demo():
        # 打开摄像头,0代表的是设备id,如果有多个摄像头,可以设置其他数值
        capture = cv.VideoCapture(0)  
        while True:
            # 读取摄像头,它能返回两个参数,第一个参数是bool型的ret,其值为True或False,代表有没有读到图片;第二个参数是frame,是当前截取一帧的图片
            ret, frame = capture.read()
            # 翻转 0:上下颠倒 大于0水平颠倒   小于180旋转
            frame = cv.flip(frame, 1)  
            cv.imshow("video", frame)
            # 键盘输入q退出窗口,不按q点击关闭会一直关不掉 也可以设置成其他键。
            if cv.waitKey(10) & 0xFF == ord('q'): 
                break
    
    
    video_demo()
    cv.destroyAllWindows()

    2 参数解释

    • capture=VideoCapture(0) : 开启视频
    0 表示打开本地摄像头,也可以设置其他数值
    也可以是视频文件地址,调用视频文件,如果要播放要设置帧的循环
    返回值:获取视频句柄
    • ret, frame = capture.read() 读取视频
    返回值两个
    返回值1:bool值,表示是否读取到视频;
    返回值2:frame,是当前截取的一帧图片
    • frame = cv.flip(frame, 1) 视频图片的反转变换
    参数2:
         0:上下颠倒 
    
         大于0:水平颠倒   
    
         小于0:180旋转

    3 视频保存

      我们要创建一个 VideoWriter 的对象。我们应该确定一个输出文件的名字。接下来指定 FourCC 编码(下面会介绍)。播放频率和帧的大小也都需要确定。最后一个是 isColor 标签。如果是 True,每一帧就是彩色图,否则就是灰度图。

      FourCC 就是一个 4 字节码,用来确定视频的编码格式。可用的编码列表可以从fourcc.org查到。这是平台依赖的。下面这些编码器对我来说是有用个。
      • In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID is more preferable. MJPG results in high size video. X264 givesvery small size video)
      • In Windows: DIVX (More to be tested and added)
      • In OSX : (I don’t have access to OSX. Can some one fill this?) 

    FourCC 码以下面的格式传给程序,以 MJPG 为例:

    cv2.cv.FOURCC('M','J','P','G') 或者 cv2.cv.FOURCC(*'MJPG')。

    # 视频保存
    import cv2
    #启动摄像头
    cap = cv2.VideoCapture(0)
    
    # 定义编解码器并创建VideoWriter对象
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
    
    while(cap.isOpened()):#摄像头是否开启
        ret, frame = cap.read() #读取视频
        frame = cv2.flip(frame, 0) #翻转视频
        if ret==True: #如果接受到视频信息
            frame = cv2.flip(frame,0)
    
            # 视频写入
            out.write(frame)
    
            cv2.imshow('frame',frame)
            if cv2.waitKey(1) & 0xFF == ord('q'): #输入q退出
                break
        else:
            break
    
    # 视频写完后就释放资源
    cap.release()
    out.release()
    cv2.destroyAllWindows()
     
  • 相关阅读:
    接收xml请求流并解析字符串的例子
    通过style来控制隔行显示不同颜色 .
    显示有模式的有页面的弹出窗口 .
    WSDL生成服务端JAVA代码.bat
    web上下文监听器ServletContextListener 例子 .
    使用监听器:定时清除map缓存的key value .
    Timer和TimerTask类 例子 .
    常用的正则表达式
    算法找出数组中出现次数超过一半的数
    C++讨厌的临时变量什么时候产生
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/10639952.html
Copyright © 2011-2022 走看看