• OpenCV官方教程中文版 —— 图片属性


    前言

    虽然 python 很强大,而且也有自己的图像处理库 PIL,但是相对于OpenCV 来讲,它还是弱小很多。跟很多开源软件一样 OpenCV 也提供了完善的 python 接口,非常便于调用。OpenCV 的稳定版是 2.4.8,最新版是 4.5.1,包含了超过 2500 个算法和函数,几乎任何一个能想到的成熟算法都可以通过调用 OpenCV 的函数来实现,超级方便。

    一、图片属性

    1.读入图像

    使用函数 cv2.imread() 读入图像。这幅图像应该在此程序的工作路径,或者给函数提供完整路径,
    第二个参数是要告诉函数应该如何读取这幅图片。

    • cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略,这是默认参数。
    • cv2.IMREAD_GRAYSCALE:以灰度模式读入图像

    cv2.IMREAD_UNCHANGED:读入一幅图像,并且包括图像的 alpha 通道

     # -*- coding: utf-8 -*-
     """
     Created on Tue Dec 31 19:16:05 2013
     @author: duan
     """
     import numpy as np
     import cv2
     # Load an color image in grayscale
     img = cv2.imread('lena512.png',0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    警告:就算图像的路径是错的,OpenCV 也不会提醒你的,但是当你使用命令print img时得到的结果是None。

    2.显示图像

    使用函数 cv2.imshow() 显示图像。窗口会自动调整为图像大小。第一个参数是窗口的名字,其次才是我们的图像。你可以创建多个窗口,只要你喜欢,但是必须给他们不同的名字

    cv2.imshow('image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3

    窗口屏幕截图将会像以下的样子 (in Fedora-Gnome machine):

    在这里插入图片描述
    cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。如果没有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键 a 是否被按下,这个后面我们会接着讨论。

    cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删除的窗口名。

    代码如下:

    # -*- coding: utf-8 -*-
    import numpy as np
    import cv2
    
    # Load an color image in grayscale
    img = cv2.imread('lena512.png', 0)
    cv2.imshow('image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.保存图像

    使用函数 cv2.imwrite() 来保存一个图像。首先需要一个文件名,之后才是你要保存的图像。

    cv2.imwrite('messigray.png',img)
    
    • 1

    总结

    下面的程序将会加载一个灰度图,显示图片,按下’s’键保存后退出,或者按下 ESC 键退出不保存。

    # -*- coding: utf-8 -*-
    import numpy as np
    import cv2
    
    img = cv2.imread('lena512.png',0)
    cv2.imshow('image',img)
    k = cv2.waitKey(0)
    if k == 27: # wait for ESC key to exit
        cv2.destroyAllWindows()
    elif k == ord('s'): # wait for 's' key to save and exit
        cv2.imwrite('messigray.png',img)
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    警告:如果你用的是 64 位系统,你需要将 k = cv2.waitKey(0) 这行改成k = cv2.waitKey(0)&0xFF。

    使用 Matplotlib
    Matplotib 是 python 的一个绘图库,里头有各种各样的绘图方法。之后会陆续了解到。现在,你可以学习怎样用 Matplotib 显示图像。你可以放大图像,保存它等等。

    窗口屏幕截图将会像以下的样子 :

    在这里插入图片描述
    参见:Matplotib 有多种绘图选择。具体可以参见 Matplotib docs。我们也会陆续了解一些

    注意:彩色图像使用 OpenCV 加载时是 BGR 模式。但是 Matplotib 是 RGB模式。所以彩色图像如果已经被 OpenCV 读取,那它将不会被 Matplotib 正确显示,正确的读法应该是将BGR模式转成RGB模式

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    img = cv2.imread('lena512.png')
    b,g,r = cv2.split(img)
    img2 = cv2.merge([r,g,b])
    plt.subplot(121);plt.imshow(img) # expects distorted color
    plt.subplot(122);plt.imshow(img2) # expect true color
    plt.show()
    
    cv2.imshow('bgr image',img) # expects true color
    cv2.imshow('rgb image',img2) # expects distorted color
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    文件上传 upload 组件 on-success 事件,添加自定义参数
    SpringBoot之Dockerfile
    云徙科技CTO李楠:技术和技术人,与数字化共同进化
    libevent数据结构——TAILQ_结构体
    模块化设计的耳机,找到属于你的色彩,魔尼悉比Rainbow耳机体验
    Excel·VBA考勤打卡记录统计结果
    Cadence virtuoso drc lvs pex 无法输入
    DHCP服务初探
    wvp平台 视频设备接入注意点
    基于微信小程序的美食推荐系统的设计与实现
  • 原文地址:https://blog.csdn.net/weixin_42207434/article/details/133210008