• [Python图像处理]一.图像处理基础知识及OpenCV入门函数


    一.图像基础知识

    图像是由像素组成的,如同图像中的小方格,每个小方格都会有一个明确的位置坐标和色彩数值。所以图像所展示的样子取决于色彩值和位置,像素是图像中最小的单位,每个点阵图像包含了一定的像素,这些像素决定了图像在屏幕中所展现的大小。常用的图像分为: 二值图像,灰度图像和彩色图像。

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

    灰度图像: 图像除了黑和白,还有灰色,将灰色划分成256个的不同的颜色,图像看着更为清晰,将彩色图像转成灰度图像的最基本预处理操作,通常包括以下几种方式:

      (1)浮点算法: gray=r0.5 + g0.5 + b0.5

      (2)整数算法: gray=(r30+g50+b10)/100

        (3)   移位方法: gray=(r30+r10+b10) >>8

             (4)   平均值法: gray=(r+g+b) / 3

             (5)    仅取绿色: gray=g

             (6)     加权平均值算法: 根据加权平均值算法: 根据光的亮度特征。公示: r=g=b=r0.299 + g*0.587+b0.144

      通过上述任意一种方式求得gray后,将原来的RGB中的R,G,B统一用gray代替,形成新的颜色,用它来代替原来的rgb就是灰度图,改变像素矩阵的rgb,来达到彩色图像转变成灰度图。

    二值图像: 二值图像中任何一个点非白即黑,白色的像素值是255, 黑色的像素值是0,将灰度图像转成二值图像,通过对像素遍历判断实现,如果像素>55,则设置为255, 否则设置为0。

    OpenCV读写图像

    1:读入图像

    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:窗口等待

    cv.waitKey(delay)

    键盘绑定函数,delay表示等待毫秒数,表示等待特定的几毫秒,看键盘是否有输入,返回ASCII值,如果参数为0,表示无限期等待;>0表示等待的毫秒数, <0 表示等待键盘单击

    4:删除窗口

    cv2.destroyAllWindows() 删除所有窗口

    cv2.destroyWindow(窗口名) 删除指定窗口

    5:写入图像

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

    代码如下

    import cv2
    
    img = cv2.imread("1.jpg")
    cv2.imshow("Demo", img)
    k = cv2.waitKey(0)
    # 按键盘ESC
    if k == 27:
        cv2.destroyWindow("Demo")
    cv2.imwrite("11.jpg", img)

    OpenCV像素处理

    1:读取像素

    灰度像素直接返回灰度值,彩色图像则返回R,G,B三个分量,OpenCV读取图像是BGR存储,需要转成RGB再进行图像处理.

    灰度图像:   返回值 = 图像(位置参数)  eg: test = img[88,42]

    彩色图像:  返回值 = 图像[位置参数, 0|1|2] 获取BGR三个通道像素

    eg: b=img[88,141, 0]    g=img[88,141, 1]   r=img[88,141, 2]

    2:修改像素

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

    灰度图像

    img[88:142] = 255

    彩色图像

    1:

    img[88, 142, 0] = 255

    img[88, 142, 1] = 255

    img[88, 142, 2] = 255

    2:

    img[88, 142] = [255, 255, 255]

    代码如下:

    import cv2
    def test2():
        img = cv2.imread("1.jpg", cv2.IMREAD_UNCHANGED)
        test = img[88, 142]
        print(test)
        img[88, 142] = [255, 255, 255]
        print(test)
        blue = img[88, 142, 0]
        green = img[88, 142, 1]
        red = img[88, 142, 2]
        print(blue, green, red)
        cv2.imshow("Demo", img)
        key = cv2.waitKey(0)
        if key == 27:
            cv2.destroyWindow("Demo")
    test2()

    运行结果:

    [23 17 40]
    [255 255 255]
    255 255 255

    将行为100到200、列150到250的像素区域设置为白色

    import cv2
    def test3():
        img = cv2.imread("1.jpg", cv2.IMREAD_UNCHANGED)
        # 行为100到200、列150到250的像素区域设置为白色
        img[100:200, 150:250] = [255, 255, 255]
        cv2.imshow("Demo", img)
        key = cv2.waitKey(0)
        if key == 27:
            cv2.destroyWindow("Demo")
    
    test3()

    效果如下:

    文章转自:  https://blog.csdn.net/eastmount/category_7912787.html

  • 相关阅读:
    extjs 小总结
    button 带有自动提交功能。
    跑马灯效果 extjs
    ExtJs之Ext.data.Store
    dojochina ext .rar
    后台得到extjs中gridpanel选中行的某个值
    关于JavaScript“跨域”问题的总结
    Eclipse+php插件+Xdebug搭建PHP完美开发/调试环境指南
    [修补 Patch] 重命名上传文件的解决办法
    容器Collection_2
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/12848717.html
Copyright © 2020-2023  润新知