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

文章目录

  • OpenCV的色彩空间——RGB与BGR
  • OpenCV的色彩空间——HSV与HSL
    • HSV主要用于OpenCV中
    • HSL
  • OpenCV色彩空间转换
    • YUV主要用于视频中
    • 题目
  • 图像操作的基石Numpy【基础操作】
    • np.array
    • np.zeros
    • np.ones
    • np.full
    • np.identity
    • np.eye
  • Numpy基本操作之矩阵的检索与赋值
  • Numpy基本操作三——ROI(Region of Image)
  • OpenCV的重要结构体Mat
    • Mat属性
  • Mat的深拷贝与浅拷贝
    • Mat浅拷贝
    • Mat深拷贝
  • 图像的多种属性
  • 通道的分割与合并

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

OpenCV的色彩空间——RGB与BGR

主要用于物理硬件显示器中
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第2张图片
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第3张图片
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第4张图片

OpenCV的色彩空间——HSV与HSL

HSV主要用于OpenCV中

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

HSL

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

OpenCV色彩空间转换

YUV主要用于视频中

OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第11张图片
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第12张图片
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第13张图片
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第14张图片
详情见官网手册
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第15张图片
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第16张图片
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()





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

题目

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

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

在这里插入图片描述
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第20张图片
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第21张图片

np.array

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

np.zeros

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

np.ones

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

np.full

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

np.identity

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

np.eye

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

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

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

# -*- 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()

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

# -*- 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()

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

# -*- 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()

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

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

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

# -*- 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()

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

# -*- 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()

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

OpenCV的重要结构体Mat

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

Mat属性

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

Mat的深拷贝与浅拷贝

OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第47张图片
红色是我们原先创建的mat,蓝色是我们之后创建的mat,我们把A赋给B,默认浅拷贝

Mat浅拷贝

拷贝的是header,并没有拷贝data
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第48张图片

Mat深拷贝

让Mat B独立,拷贝了一份data,完全和Mat A独立开来
OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第49张图片

# -*- 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()

图像的多种属性

# -*- 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)

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

通道的分割与合并

OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)_第51张图片
变成一个颜色的二维数组就没有颜色了,就只有黑白色之分了

# -*- 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()

# -*- 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()

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

你可能感兴趣的:(OpenCV,opencv,经验分享,计算机视觉)