• 技术文章 >后端开发 >Python教程

    python图像处理的基础和OpenCV的入门函数

    不言不言2018-09-08 17:28:14原创1977

    本篇文章给大家带来的内容是关于python图像处理的基础和OpenCV的入门函数,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    一.图像基础知识

    图像都是由像素(pixel)构成的,即图像中的小方格,这些小方格都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置就决定该图像所呈现出来的样子。像素是图像中的最小单位,每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。

    20180816213704238.png

    图像通常包括二值图像、灰度图像和彩色图像。


    20180816213938545.png


    1.二值图像
    二值图像中任何一个点非黑即白,要么为白色(像素为255),要么为黑色(像素为0)。将灰度图像转换为二值图像的过程,常通过依次遍历判断实现,如果像素>=127则设置为255,否则设置为0。


    20180816214313738.png

    2.灰度图像
    灰度图像除了黑和白,还有灰色,它把灰度划分为256个不同的颜色,图像看着也更为清晰。将彩色图像转换为灰度图是图像处理的最基本预处理操作,通常包括下面几种方法:
    (1) 浮点算法:Gray=R*0.3+G*0.59+B*0.11
    (2) 整数方法:Gray=(R*30+G*59+B*11)/100
    (3) 移位方法:Gray=(R*28+G*151+B*77)>>8;
    (4) 平均值法:Gray=(R+G+B)/3;(此程序采用算法)
    (5) 仅取绿色:Gray=G;
    (6) 加权平均值算法:根据光的亮度特性,公式: R=G=B=R*0.299+G*0.587+B0.144

    通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。改变象素矩阵的RGB值,来达到彩色图转变为灰度图。

    20180816214847896.png

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


    20180816215035625.png


    二.OpenCV读写图像

    本文主要使用Python2.7和OpenCV进行讲解,首先调用”pip install opencv-python”安装OpenCV库,如下图所示:

    2018081621543776.png

    1.读入图像
    OpenCV读图像主要调用下面函数实现:

    img = cv2.imread(文件名,[,参数])
    参数(1) cv2.IMREAD_UNCHANGED (图像不可变)
    参数(2) cv2.IMREAD_GRAYSCALE (灰度图像)
    参数(3) cv2.IMREAD_COLOR (读入彩色图像)
    参数(4) cv2.COLOR_BGR2RGB (图像通道BGR转成RGB)

    2.显示图像
    显示图像调用函数如下:

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

    3.窗口等待
    调用函数如下:

    cv2.waitKey(delay)
    键盘绑定函数,共一个参数,表示等待毫秒数,将等待特定的几毫秒,看键盘是否有输入,返回值为ASCII值。如果其参数为0,则表示无限期的等待键盘输入;参数>0表示等待delay毫秒;参数<0表示等待键盘单击。

    4.删除所有窗口
    调用函数如下:

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

    5.写入图片
    调用函数如下:

    retval = cv2.imwrite(文件地址, 文件名)

    下面代码是读入图片并显示保存。

    # -*- 
    coding:utf-8 -*-import cv2
    #读取图片
    img = cv2.imread("test.jpg")
    #显示图像
    cv2.imshow("Demo", img)
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #写入图像
    cv2.imwrite("testyxz.jpg", img)

    输出结果如下图所示,并且在文件夹下保存了一张名为“testyxz.jpg”的图像。

    20180816222125746.png


    如果代码中没有watiKey(0)函数,则运行结果如下图所示:

    20180816222507426.png

    同时
    可以对代码进行升级,如下所示:

    #无限期等待输入
    k=cv2.waitKey(0)
    #如果输入ESC退出
    if k==27:
        cv2.destroyAllWindows()

    三.OpenCV像素处理

    1.读取像素
    灰度图像直接返回灰度值,彩色图像则返回B、G、R三个分量。注意OpenCV读取图像是BGR存储显示,需要转换为RGB再进行图像处理。

    灰度图像:返回值 = 图像(位置参数)
    eg: test=img[88,42]
    彩色图像:返回值 = 图像[位置元素, 0 | 1 | 2 ] 获取BGR三个通道像素
    eg: blue=img[88,142,0] green=img[88,142,1] red=img[88,142,2]

    2.修改图像
    修改图像如果是灰度图像则直接赋值新像素即可,彩色图像依次给三个值赋值即可。

    灰度图像:
    img[88,142] = 255
    彩色图像:
    img[88,142, 0] = 255
    img[88,142, 1] = 255
    img[88,142, 2] = 255
    彩色图像:方法二
    img[88,142] = [255, 255, 255]

    下面代码是获取像素及修改的操作。

    # -*- coding:utf-8 -*-import cv2
    #读取图片
    img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
    test = img[88,142]print test
    img[88,142] = [255, 255, 255]print test
    #分别获取BGR通道像素
    blue = img[88,142,0]print blue
    green = img[88,142,1]print green
    red = img[88,142,2]print red
    #显示图像
    cv2.imshow("Demo", img)
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #写入图像
    cv2.imwrite("testyxz.jpg", img)

    输出结果如下所示:
    [158 107 64]
    [255 255 255]
    255
    255
    255

    下面代码是将行为100到200、列150到250的像素区域设置为白色。

    # -*- coding:utf-8 -*-import cv2
    #读取图片
    img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
    #该区域设置为白色
    img[100:200, 150:250] = [255,255,255]
    #显示图像
    cv2.imshow("Demo", img)
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #写入图像
    cv2.imwrite("testyxz.jpg", img)

    运行结果如下图所示:

    20180816224950943.png

    相关推荐:

    Python编程中使用Pillow来处理图像的基础教程

    Python零基础入门之八lambda的表达式和filter、map内置函数

    Python基于opencv的图像压缩算法实例分析

    以上就是python图像处理的基础和OpenCV的入门函数的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Python 图像处理
    上一篇:python中图像融合、加法运算及图像类型转换的实现(附代码) 下一篇:Python行结构与缩进的简单介绍
    千万级数据并发解决方案

    相关文章推荐

    • python mysqldb_MySQL• 如何将Emoj表情插入mysql5.6数据库__python+mysqldb_MySQL• Windows下安装MySQLdb, Python操作MySQL数据库的增删改查_MySQL• 快速熟悉python 下使用mysql(MySQLdb)• 关于python和php数据库连接问题_MySQL
    1/1

    PHP中文网