zoukankan      html  css  js  c++  java
  • 图像读写、属性


    一、图像读写

    1、读取 imread

    imread(filename[, flags]) -> retval
    flags 相关参数

    • cv2.IMREAD_COLOR:彩色图像

    • cv2.IMREAD_GRAYSCALE:灰度图像

    • 0,8位深度,1通道;

    • 1,8位深度,3通道;

    • 2,原深度,1通道

    • 3,原深度,3通道;

    • 4,8位深度,3通道;

    • -1,8位深度,原通道;

    无论哪种模式, imread 会删除透明通道(alpha 通道);


    import cv2 # opencv读取的格式是BGR
    import matplotlib.pyplot as plt
    import numpy as np 
    %matplotlib inline 
    
    # 读取
    img=cv2.imread('dj.jpg')
    
    

    读取为灰度图

    # 设置读取方式为灰度图
    img=cv2.imread('dj.jpg', cv2.IMREAD_GRAYSCALE)
    
     
    img.shape  # (H, W)
    #  (200, 200)
     
    
    img
    array([[64, 64, 64, ..., 87, 87, 87],
               [64, 64, 64, ..., 87, 87, 87],
               [64, 64, 64, ..., 87, 87, 87],
               ...,
               [62, 62, 62, ..., 83, 83, 83],
               [62, 62, 62, ..., 82, 83, 83],
               [62, 62, 62, ..., 82, 83, 83]], dtype=uint8)
    

    img1=cv2.imread('dj.jpg', 0)  # 设置为0,代表读取为单通道
    

    2、保存 imwrite

    imwrite(filename, img[, params]) -> retval

    • filename:文件名字
    • retval 返回布尔值,表示存储成功与否
    ret = cv2.imwrite('hi.jpg' ,img)
    print(ret)
    

    3、展示 imshow

    imshow 查看

    imshow(winname, mat) -> None

    • winname:给显示窗口取的名字
    • mat:读取出来的图像举证

    如果只是 imshow,则会一闪而过;
    设置 waitKey 等待时间,显示图片延迟时间,以 ms 为单位;设置为 0,表示不消失,让用户操作任意键来终止;

    cv2.waitKey(2000) # 2s 内消失

    waitKey 有返回值,返回任意键的 ascii 编码值;
    如果指定时间内没有按下任何按键,程序继续执行;

    也可以创建多个窗口;
    Mac 上窗口可能在后方;


    # 图像的显示,
    cv2.imshow('title',img) 
    
    # 等待时间,毫秒级,0表示任意键终止
    # cv2.waitKey(0) 
    ret = cv2.waitKey(2000) # 2s 内消失
    print(ret)
    cv2.destroyAllWindows()
    
    # 封装方法来显示图片
    def cv_show(img):
        cv2.imshow('w name',img) 
        cv2.waitKey(0) 
        cv2.destroyAllWindows()
    
    #图像的显示,也可以创建多个窗口
    cv2.imshow('image',img) 
    
    # 等待时间,毫秒级,0表示任意键终止
    cv2.waitKey(10000) 
    cv2.destroyAllWindows()
    

    4、图片属性

    图片读取后本质是矩阵;灰度图是二维,彩色图是三维


    img.size  # 像素点的个数
    
    img
    
    array([[[ 53,  52,  91],
            [ 53,  52,  91],
            [ 53,  52,  91],
            ...,
           [[ 51,  50,  89],
            [ 51,  50,  89],
            [ 51,  50,  89],
            ...,
            [ 66,  66, 120],
            [ 67,  67, 121],
            [ 67,  67, 121]]], dtype=uint8)
    
    img.shape
     # (200, 200, 3)
    
    height, width, n = img.shape
    print(height, width, n)
    # 200 200 3
    
    type(img)
    # numpy.ndarray
    

    img[0][0]
    # array([53, 52, 91], dtype=uint8)
    

    type(img) 
    
    img.dtype # 数据类型
    

    二、视频读取

    视频也是由图像组成的;是一帧一帧静止的图像组成的;
    读取视频文件后,还是会拆分为每一帧,对每一帧做操作。

    • cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
    • 如果是视频文件,直接指定好路径即可。
    vc = cv2.VideoCapture('djm.mp4')
    
    # 检查是否打开正确
    if vc.isOpened(): 
        open, frame = vc.read() 
        # open 代表是否能打开;frame 代表当前这一帧的图像 ;vc.read() 一次读取一帧
    else:
        open = False 
    
    
    # 遍历每一帧
    while open: 
        ret, frame = vc.read() 
        if frame is None:
            break 
        if ret == True: 
            gray = cv2.cvtColor(frame,  cv2.COLOR_BGR2GRAY) # 转化为灰度图
            cv2.imshow('result', gray)
            # 每等 100ms 下一帧;27 表示退出键;
            if cv2.waitKey(100) & 0xFF == 27:
                break
                
    vc.release()
    cv2.destroyAllWindows()
    
  • 相关阅读:
    git安装
    git
    运维项目维护个人总结经验
    redis基本命令
    mysql基础常用命令
    进入Linux单用户模式
    Nginx查看并发链接数
    linux编写脚本检测本机链接指定IP段是否畅通
    集体干死java 在启动.sh
    系统优化小脚本
  • 原文地址:https://www.cnblogs.com/fldev/p/14371014.html
Copyright © 2011-2022 走看看