当前位置:   article > 正文

openCV+Python 数字图像处理(1)——图像基本操作(读入显示保存、属性读取、均值标准差、取反、色彩空间转换、提取颜色、通道分离与合并)_cv2图片标准差

cv2图片标准差

包括图像的读入、显示、保存,获取图片大小、通道数等属性,求取图像均值、标准差,遍历图像各个像素,图像取反,图像色彩空间转换,提取某种颜色,通道分离与合并等

1.基本操作

  • (1)读入图像
# 默认的读入格式是BGR
img1 = cv2.imread('E:/PycharmProjects/one.jpg')
  • 1
  • (2)显示图像
cv2.imshow(‘winname’, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 1
  • 2

cv2.imshow(winname, mat) 有窗口名和图片两个参数,不要忘记第一个参数
cv2.waitKey(delay: Any = None) 等待键盘输入。参数为延迟时间,单位为ms。参数为0时表示一直等到有键盘任意输入再进行下一操作。

  • (3)保存图像
cv2.imwrite('E:/PycharmProjects/one.png', img1)

    cv2.imwrite(filename, img) 有文件名和图片两个参数,通过设定文件名的后缀可以转换图片格式

    • (4)获取图片属性
    def img_info(img):
        print('type:', type(img))
        print('img.size:', img.size)
        print('img.dtype:', img.dtype)
        print('img.shape', img.shape)
    img_info(img1)
    • 1
    • 2
    • 3
    • 4
    • 5

    type( ): 获取对象类型,图像类型为numpy.ndarray
    .shape: h, w, c 高度、宽度、通道数,最常用
    .size: 图像像素总数
    .dtype: 数据类型,默认为uint8

    • (5)图像求均值、标准差
    mean_img = cv2.mean(img)
    m, stddev = cv2.meanStdDev(img)
    • 1

    图像有三个通道时,结果为三个通道分别求均值和标准差

    • (6)遍历图像各个像素且取反
    import cv2
    import numpy as np
    img1 = cv2.imread('E:/PycharmProjects/one.jpg')
    def reverse_img(img):
        h, w, c = img.shape
        r_img = np.ones([h, w, c], dtype=np.uint8)#要注意dtype为np.uint8,否则图像无法正常显示
        print(r_img.dtype)
        print(r_img)
        print(r_img.shape)
        for row in range(h):
            for col in range(w):
                for ch in range(c):
                    r_img[row, col, ch] = 255-img[row, col, ch]
        print(r_img.dtype)
        show('reverse_img', r_img)
    
    reverse_img(img1)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • (7)图像取反
    ot_img1 = cv2.bitwise_not(img1)
      • (8)图像色彩空间转换
      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
      hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
      • 1

      HSV(Hue, Saturation, Value)色彩空间,H(色调),S(饱和度),V(明度)

      • (9)提取图像中某种颜色
      low = np.array([0, 0, 0])
      up = np.array([255, 100, 100])
      blue_img1 = cv2.inRange(img1, low, up)
      • 1
      • 2
      cv2.inRange(src: Any, lowerb: Any, upperb: Any, dst: Any = None)

        lowerb, upperb: numpy.ndarray类型

        HSV基本颜色分量范围:HSV基本颜色分量范围

        • (10)通道分离与合并
        b, g, r = cv2.split(img)
        merge_img = cv2.merge([b, g, r])
        • 1

        2.代码示例

        import cv2
        import numpy as np
        
        # 1.读入图片和保存图片
        img1 = cv2.imread('E:/PycharmProjects/one.jpg')
        
        # 2.显示图片
        def show(name, img):
            cv2.imshow(name, img)
            cv2.waitKey(0)
        show('img1', img1)
        
        # 3.保存图像
        cv2.imwrite('E:/PycharmProjects/one.png', img1)
        
        # 4.获取图片属性
        def img_info(img):
            print('type:', type(img))
            print('img.size:', img.size)
            print('img.dtype:', img.dtype)
            print('img.shape', img.shape)
        img_info(img1)
        
        # 5.图像求均值、标准差
        def mean_dev(img):
            mean_img = cv2.mean(img)
            print('mean', mean_img)
            m, stddev = cv2.meanStdDev(img)
            print('m', m, '\n', 'StdDev', stddev)
        mean_dev(img1)
        
        # 6.遍历图像各个像素且取反(有问题)
        def reverse_img(img):
            h, w, c = img.shape
            r_img = np.zeros([h, w, c])
            for row in range(h):
                for col in range(w):
                    for ch in range(c):
                        r_img[row, col, ch] = 255-img[row, col, ch]
            show('reverse_img', r_img)
        
        # reverse_img(img1)
        
        # 7.openCV取反函数
        def not_img(img):
            not_img = cv2.bitwise_not(img)
            show('not_img', not_img)
        not_img(img1)
        
        # 8.图像色彩空间转换
        def color_cvt_img(img):
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
            show('gray', gray)
            show('hsv', hsv)
        color_cvt_img(img1)
        
        # 9.对图片的某种颜色进行提取
        def color_inrange(img):
            low = np.array([0, 0, 0])
            up = np.array([255, 100, 100])
            blue_img1 = cv2.inRange(img1, low, up)
            show('blue_img1', blue_img1)
        color_inrange(img1)
        
        
        # 10.通道分离、合并
        def img_channel(img):
            b, g, r = cv2.split(img)
            show('blue', b)
            print('blue.shape', b.shape)
            merge_img = cv2.merge([b, g, r])
            show('merge_img', merge_img)
        img_channel(img1)
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
        • 31
        • 32
        • 33
        • 34
        • 35
        • 36
        • 37
        • 38
        • 39
        • 40
        • 41
        • 42
        • 43
        • 44
        • 45
        • 46
        • 47
        • 48
        • 49
        • 50
        • 51
        • 52
        • 53
        • 54
        • 55
        • 56
        • 57
        • 58
        • 59
        • 60
        • 61
        • 62
        • 63
        • 64
        • 65
        • 66
        • 67
        • 68
        • 69
        • 70
        • 71
        • 72
        • 73

        3.结果展示

        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述

        声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/133142
        推荐阅读
        相关标签
          

        闽ICP备14008679号