zoukankan      html  css  js  c++  java
  • OpenCV-Python入门教程1-图片

    首先感觉学习OpenCV-python最好的学习工具官方的英文文档。

    官方英文教程:OpenCV-Python Tutorials

    我使用的是anaconda里的 jupyter notebook。至于如何安装,请自行百度。然后再安装 cv2包

    快速、简洁、流行的python

    众所周知,python的语法简洁,编写高效。但是运行速度,相比较C/C++来说就慢很多。但是Python是一门胶水语言!很容易扩展C/C++。OpenCV-Python就是用Python包装了C++的实现,背后实际上是C++的代码再跑,所以代码的运行速度跟原生C/C++速度一样快!而且python的代码量相比较C++来说,会少很多。此外,图像是矩阵数据,OpenCV-Python原生支持Numpy,相当于Python中的Matlab,为矩阵运算、科学计算提供了极大的便利。以上的所有特性都促进了Python的快速流行。

    图像一般是(height,width)也就是坐标(y, x)这点不能弄混淆,后面还会提到

    图像坐标的起始点是在左上角,所以行对应y,列对应x

    使用OpenCV显示和保存图片

    一、加载图片

    import cv2
    # 加载灰度图
    img = cv2.imread('lena.jpg', 0)

    参数1:图片的文件名

    • 如果图片放在当前文件夹下,直接写文件名就行了,如lena.jpg
    • 否则需要给出绝对路径,如D:OpenCVSampleslena.jpg

    参数2:读入方式,省略即采用默认值

    • cv2.IMREAD_COLOR:彩色图,默认值(1)
    • cv2.IMREAD_GRAYSCALE:灰度图(0)
    • cv2.IMREAD_UNCHANGED:包含透明通道的彩色图(-1)  

     二、显示图片

    # 窗口不可调节,窗口会自适应图片的大小
    cv2.imshow('lena', img)
    cv2.waitKey(0)

    参数1是窗口的名字,参数2是要显示的图片。不同的窗口之间用窗口名区分,窗口名相同就表示同一个窗口

    cv2.waitKey()让程序暂停,参数是等待时间(毫秒ms)。参数0表示一直等待。等待期间也可以获取用户输入

    我们也可以先创建一个窗口,然后显示图片

    # 先定义窗口,后显示图片
    # 窗口可以调节
    cv2.namedWindow('lena2', cv2.WINDOW_NORMAL)
    cv2.imshow('lena2', img)
    cv2.waitKey(0)

    参数1是窗口名字,参数2默认是cv2.WINDOW_AUTOSIZE,表示窗口大小自适应图片,也可以设置为cv2.WINDOW_NORMAL,表示窗口大小可调整。图片较大时,可以考虑使用后者

    三、保存图片

    # 保存图片
    cv2.imwrite('lena_gray.jpg', img)

    四、小结

    cv2.imread()读入图片、cv2.imshow()显示图片、cv2.imwrite()保存图片。

    五、练习

    打开lena.jpg并显示,如果按下's',就保存图片为'lena_save.bmp',否则就结束程序

    # 练习
    import cv2
    img = cv2.imread('lena.jpg', 0)
    cv2.imshow('lena', img)
    k = cv2.waitKey(0)
    
    # ord()获取某个字符的编码
    if k == ord('s'):
        cv2.imwrite('lena_save.bmp', img)

     前面都是使用Opencv读入、显示和保存图片函数。其实Python也有自己的绘图库---Matplotlib

    使用Matplotlib显示图像

    显示灰度图

    import cv2
    import matplotlib.pyplot as plt
    
    img = cv2.imread('lena.jpg', 0)
    
    # 灰度图显示,cmap(color map)设置为gray
    plt.imshow(img, cmap='gray')
    plt.show()

    显示彩色图

    OpenCV中的图像是以BGR的通道顺序存储的,但Matplotlib是以RGB模式显示的,所以直接在Matplotlib中显示需要转换一下:

    import cv2
    import matplotlib.pyplot as plt
    
    img = cv2.imread('lena.jpg')
    img2 = img[:, :, ::-1]
    
    # 或者使用cv2.COLOR_BGR2RGB 其实这种写法更常见
    #img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    # 显示不正确的图
    plt.subplot(121),plt.imshow(img)
    
    # 显示正确的图
    plt.subplot(122)
    plt.xticks([]),plt.yticks([])  # 隐藏x和y轴
    plt.imshow(img2)
    plt.show()

    img[:, :, 0]表示蓝色通道,img[:, :, ::-1]表示BGR翻转,编程RGB

    在Python中字符串s翻转可以这样写:s[::-1], 'abc'编程‘cba’,-1表示逆序

    图片是二维的

    img2 = img[:,:] # 写全就是:img2 = img[0:height,0:width]

    图片有三个通道,相当于长度为3的字符串。所以通道翻转与图片复制组合起来便是img[:,:,::-1]。

    加载和保存图片

    import matplotlib.image as pli
    
    img = pli.imread('lena.jpg')
    
    plt.imshow(img)
    
    # 保存图片,需放在show()函数之前
    plt.savefig('lena2.jpg')
    plt.show()

    参考地址:https://tianchi.aliyun.com/course/courseConsole?courseId=40992&chapterIndex=1&sectionIndex=10

     

  • 相关阅读:
    Heroku
    Git基本命令(转)
    github之从零开发
    物理层、、。。。
    BeautifulSoup, 的使用
    路径设置
    http协议
    Python 的os模块与sys模块
    python 操作MySQL数据库
    多进程记要
  • 原文地址:https://www.cnblogs.com/gezhuangzhuang/p/10282839.html
Copyright © 2011-2022 走看看