• OpenCV4【1】- 入门用法


     opencv 是一个强大的图像处理模块,本节介绍一下基本操作

    安装

    详情请百度

    pip install opencv-python

    查看版本

    import cv2 as cv
    
    ### 查看版本
    print(cv.__version__)       # 4.5.2

    创建图像

    直接用 np 创建图像,并在窗口显示;

    注意指定数据格式为 np.uint8,8位无符号整型    【这条注意 别整幺蛾子,真想玩的话看看 参考资料】

    img = np.zeros((128, 128, 3), np.uint8)     # 注意指定数据格式为 np.uint8,8位无符号整型
    cv.imshow('t', img)         # 第一个参数是 nameWindow,代表显示图像的窗口,可提前创建,也可直接引用
    cv.waitKey(0)               # 避免图像闪退

    创建窗口

    cv.namedWindow(winname='t2')    # 新建窗口,类似于 plt.figure,可有可无
    cv.imshow('t2', img)
    cv.waitKey(1)

    操作已有图像

    主要了解 读取、显示、存储图像的基本操作

    imread - imshow - imwrite

    imread 读取图像,需要注意几点

    1. 返回 ndarray 格式;

    2. 返回图像的 BGR 格式;    【刚好是 RGB 反过来,好记】

    img = cv2.imread('image/noise.png')     ### 读取图像,返回 ndarray 格式
    print(type(img))    # <class 'numpy.ndarray'>
    
    window = cv2.namedWindow('test')    ### 创建一个命名窗口,用于显示图片,可省略
    cv2.imshow('t', img)            ### 不在 命名窗口中显示图片,会新开一个窗口
    cv2.imshow('test', img)         ### 在命名窗口中显示图片
    
    cv2.waitKey(0)              ### 等待,如果没有这句,窗口会一闪而过,0代表无限等待,可用具体数字,表示等待时长
    # cv2.destroyWindows('t')      ### 释放指定窗口
    # cv2.destroyAllWindows()      ### 释放所有窗口
    
    cv2.imwrite('image/save.png', img)      ### 写入

    imread

    def imread(filename, flags=None)

    flags 说明

    cv.IMREAD_COLOR 1: 加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。

    cv.IMREAD_GRAYSCALE 0:以灰度模式加载图像

    cv.IMREAD_UNCHANGED -1:加载图像,包括alpha通道

    LoadImage - ShowImage - SaveImage

    这套 API 已废弃

    img = cv2.cv.LoadImage('image/noise.png')
    print(type(img))
    cv2.cv.ShowImage('t', img)
    cv2.waitKey(0)
    cv2.cv.SaveImage('image/save2.png', img)

    waitKey 用法

    该函数功能是 不断刷新图像,也可以理解为 等待 关闭时间

    def waitKey(delay=None): 
        """
        @param delay Delay in milliseconds. 0 is the special value that means "forever".
        """
        pass

    delay 表示 刷新频率,单位是 ms,

    若 取值 1,代表 1ms 刷新一次,也就是说 1ms 后 关闭;

    若 取值 10000,代表 10000ms 刷新一次,也就是说 10000ms 后关闭;

    若 取值 0,比较特殊,代表 永不关闭

    其实更确切的说法是:在 while 循环中,表示 不断刷新图像;不在 while 循环中,表示 等待关闭时间

    img = np.zeros((128, 128, 3), np.uint8)
    n = 0
    while n < 100:
        print(n)
        cv.imshow('t3', img)
        cv.waitKey(1)               # 在 while 循环里,每 1ms 刷新一次
        n += 1
    
    cv.imshow('t4', img)
    cv.waitKey(1)                   # 不在 while 循环里,1ms 闪退

    ESC 退出

    等待用户触发事件, 等待时间为 delay ms,如果在这个时间段内, 用户按下ESC (ASCII码为27), 执行if体

    img = np.zeros((128, 128, 3), np.uint8)
    while 1:
        cv.imshow('t5', img)
        if cv.waitKey(100) == 27:   # 若 100ms 内 按下 esc 键,关闭图像
            break

    参考资料:

    https://zhidao.baidu.com/question/532862991.html  uint8和uint16 是什么数据类型

    https://www.pythonheidong.com/blog/article/291577/cde89f1cb8c3e00bce3e/  为什么在Opencv python包装器中数据类型必须为'uint8'

    https://blog.csdn.net/weixin_44572622/article/details/97494468  waitKey()在opencv中的用法

  • 相关阅读:
    非常精辟的几句话
    关于免杀的实践
    分析PE
    分析 Nanocore
    CTO的窘境
    企业级容器云平台
    POJ 2274
    POJ 1703
    POJ 1182
    DNS协议以及报文格式总结
  • 原文地址:https://www.cnblogs.com/yanshw/p/12559557.html
Copyright © 2020-2023  润新知