用Python+OpenCV进行图像处理基本操作

引言

用python进行处理图像,我一开始是使用的PIL库,不过目前看来我需要要转到openCV上了,因为涉及到一些图形处理的算法上,PIL库还是太简单了。openCV作为研究计算机视觉、机器学习等算法的首选库,学会使它对我目前的图像处理的学习还是非常有必要的。

OpenCV库的安装

由于openCV是一种支持多平台多语言的库,所以其安装是非常简单的,直接到官网上下载对应操作系统的安装包安装即可。

由于我这里是要在python中对其进行调用,在windows下还需要另外一步操作:

opencv/build/python/2.7/x64/目录下的 cv2.pyd文件(当然如果你的操作系统是32bit的目录则为 opencv/build/python/2.7/x86/),复制到python的安装目录的 Lib/site-packages/子目录中。

在python的命令行中测试import cv2,无错误则表示python对openCV库调用成功。

不过要注意的是:

  • 安装的openCV版本需要支持你安装的python的版本
  • 需要numpy的支持,所以openCV安装前要确保numpy安装好了
  • 推荐同时安装matplotlib库,提供多种图标的绘制,不过这个是可选的

Python中使用OpenCV的对图像的基本操作

官方的说明参考官方说明文档地址为:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html

详细的使用直接看官方文档,我这里这里只是通过阅读官方文档,整理一些最基本的使用方法和注意事项。

  1. 读取图片

    使用openCV先需要导入库

    1
    import cv2

    使用imread()函数读取不同格式的图像,返回值numpy.ndarray类型的数据

    1
    img = cv2.imread('messi5.jpg')
  2. 显示图片

    使用imshow()函数创建一个窗口来显示图片

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

    注意点:

    • cv2.imshow()函数第一参数为窗口的名字,第二参数是需要显示的图片。函数可以创建多个窗口,并同时显示,但是窗口名不同相同。
    • cv2.waitKey()函数是等待案件消息处理函数,出窗口的消息。
    • cv2.destroyAllWindows()销毁所有窗口
  3. 保存图片

    使用imwrite()函数写入保存图片

    1
    cv2.imwrite('messigray.png',img)
  4. 使用matplotlib画图

    显示用灰色模式图片

    1
    2
    3
    4
    5
    import cv2  
    import matplotlib.pyplot as plt
    img = cv2.imread("chengbao.jpg",0)
    plt.imshow(img, cmap = 'gray')
    plt.show()

    上面代码是显示灰色模式的图片,但是如果是彩色模式的话,要注意一个问题:

    OpenCV的色彩模式是BGR模式,而Matplotlib的显示模式是RGB所示,直接OpenCV导入的图片用Matplotlib显示是不能正确显示的。如果需要正确显示的话要将BGR模式转化为RGB模式。处理方法参考stackoverflow上的帖子

  5. 访问和修改pixel Rawdata

    cv2.imread()函数的返回值即使图像的Rawdata,是numpy.darray类型的数据。通过这个返回值可以操作图像的原始数据,所以对Rawdata的操作都只要用到numpy的方法就可以了,不管是点操作或者区域操作。

  6. 创建边框

    使用cv2.copyMakeBorder()函数创建边框

    1
    constant = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTAN,value=[255,0,0])

    结果对比如下图:

    无border
    加border

Compartir