• Python 图像处理 OpenCV (1):入门


    引言

    又开一个新的系列分享,对图像处理感兴趣的同学可以关注这个系列。

    更新频率尽量保持一周两到三次推送。

    新系列第一件事儿当然是资源推荐,下面是一些有关 OpenCV 的资源链接:

    资源链接

    图书推荐

    图书的话我就推荐一本吧,如果要看书学习绝对不能错过的「Learning OpenCV 3」,当然,是英文原版的,中文版的话翻译有点惨不忍睹,对英文阅读压力大的同学可以中英文对照着看:

    安装

    OpenCV 在 Python 中有两个类库,一个是 opencv-python ,另一个是 opencv-contrib-python

    opencv-python 是只包含了主要模块的包,而 opencv-contrib-python 包含了主要模块以及一些扩展模块,带一些收费或者专利的算法,还有一些比较新的算法的高级版本。

    安装的时候选择自己喜欢的版本装就好了,命令如下:

    # opencv-python 安装命令
    pip install opencv-python
    
    # opencv-contrib-python
    pip install opencv-contrib-python
    

    安装完成后可以通过以下代码查看安装的版本信息:

    import cv2 as cv
    
    # 查看版本信息
    print(cv.getVersionString())
    
    # 输出结果
    4.2.0
    

    我这里的环境为:

    • Python:3.7.4
    • opencv-python:4.2.0

    图像的基础知识

    图像都是由像素( pixel )构成的,就像下面的这种小方格:

    这些小方格每一个都有自己明确的位置和被分配的色彩值,而这些小方格的颜色和位置就决定了这个图像所呈现出来的样子。

    像素是图像中最小的单位,每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。

    图像通常包括有 二值图像灰度图像彩色图像

    二值图像

    二值图像就是在图像中,任何一个点非黑即白,像素要么为 255 (白色) 要么为 0 (黑色) 。转换的时候一般将像素 >=127 的设置为白色,其余的设置为黑色。

    灰度图像

    灰度图像是除了黑白之外,还添加了第三种颜色:灰色,灰色把灰度划分为 256 个不同的亮度,例如纯白色,它的亮度级别是255。

    图像转化为灰度图像有以下几种算法:

    • 浮点算法:Gray = R * 0.3 + G * 0.59 + B * 0.11
    • 整数方法:Gray = ( R * 30 + G * 59 + B * 11 ) / 100
    • 移位方法:Gray = ( R * 76 + G * 151 + B * 28 ) >> 8
    • 平均值法:Gray = ( R + G + B ) / 3
    • 仅取绿色:Gray = G
    • 加权平均值算法:R = G = B = R * 0.299 + G * 0.587 + B * 0.144

    彩色图像

    彩色图像是RGB图像,RGB表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道。

    常用图像示例代码

    上面这三种图像的示例代码如下:

    import cv2 as cv
    
    # 读取图像
    img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
    cv.imshow("read_img", img)
    # 灰度图像
    img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
    cv.imshow("gray_img",img_gray)
    # 二值图像
    ret, binary = cv.threshold(img_gray, 127, 255, cv.THRESH_BINARY)
    cv.imshow("binary_img", binary)
    
    cv.waitKey()
    

    OpenCV 入门

    1. 读入图像

    读取图像是通过函数 cv.imread() 实现。

    语法:

    img = cv.imread(文件名,[,参数])
    

    第二个参数是一个标志,它指定了读取图像的方式。

    • cv.IMREAD_COLOR: 加载彩色图像,任何图像的透明度都会被忽视,如果不传参数,这个值是默认值。
    • cv.IMREAD_GRAYSCALE:以灰度模式加载图像。
    • cv.IMREAD_UNCHANGED:加载图像,包括alpha通道

    注意:这三个标志可以简化为 1 、 0 、 -1 。

    2. 显示图像

    显示图像是通过函数 cv.imshow() 函数实现。

    语法:

    cv.imshow(窗口名, 图像名)
    

    3. 窗口等待

    显示图像是通过函数 cv.waitKey(delay) 函数实现。

    语法:

    cv.waitKey(delay)
    

    cv.waitKey() 是一个键盘绑定函数。其参数是以毫秒为单位的时间。该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果 0 被传递,它将无限期地等待一次敲击键。

    4. 删除窗口

    调用函数如下:

    cv.destroyAllWindows() 删除所有窗口
    cv.destroyWindows() 删除指定的窗口
    

    5. 写入图像

    调用函数如下:

    cv.imwrite(文件地址, 文件名)
    

    代码示例

    我们读取一张图片,将这张图片显示出来后,再将这张图片保存起来。

    import cv2 as cv
    
    # 读取图片
    img = cv.imread("maliao.jpg", 1)
    
    # 显示图片
    cv.imshow("demo", img)
    
    # 等待输入
    cv.waitKey(0)
    cv.destroyAllWindows()
    
    # 图片写入
    cv.imwrite("demo.jpg", img)
    

    这里需要注意的是 cv.waitKey(0) 必须要加,如果不等待输入,整个窗体将会一闪而过。

    示例代码

    如果有需要获取源码的同学可以在公众号回复「OpenCV」进行获取。

    参考

    https://blog.csdn.net/Eastmount/article/details/81748802

    http://woshicver.com/

  • 相关阅读:
    2017-2018-1 20179215《Linux内核原理与分析》第九周作业
    2017-2018-1 20179215 速读《构建之法》
    2017-2018-1 20179215 速读《从问题到程序》
    2017-2018-1 20179215《Linux内核原理与分析》第八周作业
    2017-2018-1 20179215《Linux内核原理与分析》第七周作业
    2017-2018-1 20179215 课堂测试
    2017-2018-1 20179215《Linux内核原理与分析》第六周作业
    2017-2018-1 20179215《Linux内核原理与分析》第五周作业
    20179215 第二周课堂测试
    2017-2018-1 20179215《Linux内核原理与分析》第三周作业
  • 原文地址:https://www.cnblogs.com/babycomeon/p/12908629.html
Copyright © 2020-2023  润新知