• OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)



    在这里插入图片描述

    OpenCV的色彩空间——RGB与BGR

    主要用于物理硬件显示器中
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    OpenCV的色彩空间——HSV与HSL

    HSV主要用于OpenCV中

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

    HSL

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

    OpenCV色彩空间转换

    YUV主要用于视频中

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    详情见官网手册
    在这里插入图片描述
    在这里插入图片描述
    cvtColor函数

    # -*- coding: utf-8 -*-
    import cv2
    
    def callback():
        pass
    
    # 创建窗口
    cv2.namedWindow('color', cv2.WINDOW_NORMAL)
    
    img = cv2.imread('E://pic//love_girl_guy_beach_sea_peter_smile_couple_5760x3840.jpg')
    
    colorspaces = [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA, 
                   cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV, 
                   cv2.COLOR_BGR2YUV]
    
    cv2.createTrackbar('curcolor', 'color', 0, len(colorspaces), callback)
    
    while True:
        index = cv2.getTrackbarPos('curcolor', 'color')
        # 颜色空间转换API
        cvt_img = cv2.cvtColor(img, colorspaces[index])
    
        cv2.imshow('color', cvt_img)
        key = cv2.waitKey(10)
        if key & 0xff == ord('q'):
            break
    
    cv2.destroyAllWindows()
    
    • 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

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

    题目

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

    图像操作的基石Numpy【基础操作】

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

    np.array

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

    np.zeros

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

    np.ones

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

    np.full

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

    np.identity

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

    np.eye

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

    Numpy基本操作之矩阵的检索与赋值

    在这里插入图片描述

    # -*- coding: utf-8 -*-
    import cv2
    import numpy as np
    
    img = np.zeros((480, 640), np.uint8)
    
    cnt = 0
    while cnt < 200:
        img[cnt, 100] = 255
        cnt += 1
    
    cv2.imshow('img', img)
    key = cv2.waitKey(0)
    if key & 0xff == ord('q'):
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    # -*- coding: utf-8 -*-
    import cv2
    import numpy as np
    
    img = np.zeros((480, 640, 3), np.uint8)
    
    cnt = 0
    while cnt < 200:
    	# BGR
        img[cnt, 100, 0] = 255
        cnt += 1
    
    cv2.imshow('img', img)
    key = cv2.waitKey(0)
    if key & 0xff == ord('q'):
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    # -*- coding: utf-8 -*-
    import cv2
    import numpy as np
    
    img = np.zeros((480, 640, 3), np.uint8)
    
    cnt = 0
    while cnt < 200:
        img[cnt, 100] = [0, 0, 255]
        cnt += 1
    
    cv2.imshow('img', img)
    key = cv2.waitKey(0)
    if key & 0xff == ord('q'):
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    Numpy基本操作三——ROI(Region of Image)

    在这里插入图片描述

    # -*- coding: utf-8 -*-
    import cv2
    import numpy as np
    
    img = np.zeros((480, 640, 3), np.uint8)
    
    # cnt = 0
    # while cnt < 200:
    #     img[cnt, 100] = [0, 0, 255]
    #     cnt += 1
    roi = img[100:400, 200:600]
    roi[:] = [0, 255, 0]
    
    cv2.imshow('img', roi)
    key = cv2.waitKey(0)
    if key & 0xff == ord('q'):
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    # -*- coding: utf-8 -*-
    import cv2
    import numpy as np
    
    img = np.zeros((480, 640, 3), np.uint8)
    
    # cnt = 0
    # while cnt < 200:
    #     img[cnt, 100] = [0, 0, 255]
    #     cnt += 1
    roi = img[100:400, 100:600]
    roi[:] = [0, 255, 0]
    roi[:, 100] = [0, 0, 0]
    roi[10:200, 10:200] = [255, 0, 0]
    
    cv2.imshow('img', roi)
    key = cv2.waitKey(0)
    if key & 0xff == ord('q'):
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    OpenCV的重要结构体Mat

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

    Mat属性

    在这里插入图片描述

    Mat的深拷贝与浅拷贝

    在这里插入图片描述
    红色是我们原先创建的mat,蓝色是我们之后创建的mat,我们把A赋给B,默认浅拷贝

    Mat浅拷贝

    拷贝的是header,并没有拷贝data
    在这里插入图片描述

    Mat深拷贝

    让Mat B独立,拷贝了一份data,完全和Mat A独立开来
    在这里插入图片描述

    # -*- coding: utf-8 -*-
    import cv2
    import numpy as np
    
    img = cv2.imread('E://pic//2.jpg')
    
    # 默认浅拷贝
    img2 = img
    
    # 深拷贝
    img3 = img.copy()
    
    img[10:100, 10:100] = [0, 255, 66]
    cv2.imshow('img', img)
    cv2.imshow('img2', img2)
    cv2.imshow('img3', img3)
    key = cv2.waitKey(0)
    if key & 0xff == ord('q'):
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    图像的多种属性

    # -*- coding: utf-8 -*-
    import cv2
    import numpy as np
    
    img = cv2.imread('E://pic//2.jpg')
    # shape属性中包含三个信息
    # 高度、长度、通道数
    print(img.shape)
    
    # 图像占用多大空间
    # 高度 * 长度 * 通道数
    print(img.size)
    
    # 图像中每个元素的位深
    print(img.dtype)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    通道的分割与合并

    在这里插入图片描述
    变成一个颜色的二维数组就没有颜色了,就只有黑白色之分了

    # -*- coding: utf-8 -*-
    import cv2
    import numpy as np
    
    img = cv2.imread('E://pic//2.jpg')
    
    b, g, r = cv2.split(img)
    b[10:100, 10:100] = 255
    g[10:100, 10:100] = 255
    r[10:100, 10:100] = 255
    
    cv2.imshow('img', img)
    cv2.imshow('b', b)
    cv2.imshow('g', g)
    cv2.imshow('r', r)
    
    key = cv2.waitKey(0)
    if key & 0xff == ord('q'):
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    # -*- coding: utf-8 -*-
    import cv2
    import numpy as np
    
    img = cv2.imread('E://pic//2.jpg')
    
    b, g, r = cv2.split(img)
    b[10:100, 10:100] = 255
    g[10:100, 10:100] = 255
    # r[10:100, 10:100] = 255
    
    img2 = cv2.merge((b, g, r))
    
    cv2.imshow('img', img)
    cv2.imshow('b', b)
    cv2.imshow('g', g)
    cv2.imshow('r', r)
    cv2.imshow('img2', img2)
    
    key = cv2.waitKey(0)
    if key & 0xff == ord('q'):
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

  • 相关阅读:
    【数据结构与算法-初阶】栈和队列
    46.全排列-py
    带你徒手完成基于MindSpore的CycleGAN实现
    Unity实现一个可扩展的UGUI无限滑动列表控件
    油罐监测系统无线解决方案,真正实现无人值守
    报错:npm ERR code EPERM
    Spring知识点总结-DX的笔记
    笔记本屏幕忽亮忽暗解决方法大全,总有一款适合你
    图形学-着色频率与渲染管线
    So easy!吃透阿里最新产Spring全家桶速成笔记,轻松拿捏spring技术栈
  • 原文地址:https://blog.csdn.net/qq_44631615/article/details/134399637