转载 hahahaha兔子 图像基本操作

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

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.结果展示

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

                                        </div><div><div></div></div>
                    <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-ff98e99283.css" rel="stylesheet">
                                    </div>
                </article>
        
        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值