色彩空间及其转换与应用

一、彩色空间

1、YCbCr彩色空间

Y:亮度信息
Cb:彩色信息,蓝色分量
Cr:彩色信息,红色分量
注:BGR2YCrCb:把BGR图像转换为YCbCr图像,公式如下
在这里插入图片描述

2、HSV彩色空间

H:色调,也称色泽
S:饱和度,也称明暗
V:数值,也称调色
HSV基于柱坐标表系。色调是围绕彩色六边形描述,轴代表所有灰度级,饱和度即为到轴的距离。
在这里插入图片描述

二、hsv常用色彩转换值表

在这里插入图片描述

三、代码

import cv2 as cv
import numpy as np

# 提取有颜色的对象进行二值化转换
def extrace_object_demo():
    capture = cv.VideoCapture('D:/OpenCV/opencv-python/20220305_11.mp4')
    while True:
        ret, frame = capture.read()
        if not ret:
            break
        hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
        lower_hsv = np.array([0, 0, 221])
        upper_hsv = np.array([180, 30, 255])
        """
        inRange(src, lowerb, upperb, dst=None)
        作用:得到二值化图像,将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0)
            src:输入要处理的图像,可以为单通道或多通道。
            lowerb:包含下边界的数组或标量。
            upperb:包含上边界数组或标量。
            dst:输出图像,与输入图像src 尺寸相同且为CV_8U 类型,输出一幅二值化之后的图像
        """
        mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)
        # mask:图像掩膜,可选参数,为8位单通道的灰度图像,指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出。
        dst = cv.bitwise_and(frame, frame, mask=mask)
        cv.imshow('video', frame)
        cv.imshow('mask', dst)
        # ’10‘越小播放越快
        c = cv.waitKey(10)
        if c == 27:
            break

# 色彩转换
def color_space_demo(image):
    """
    :param image: cvtColor(Mat src, Mat dst, int code)---将彩色图像转换为灰度图像或其他图像
        src - 表示来源的矩阵。
        dst - 表示目的地的矩阵。
        code - 表示转换类型的整数代码,例如RGB到灰度。
    :return:
    """
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    cv.imshow('gray', gray)
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
    cv.imshow('hsv', hsv)
    yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)
    cv.imshow('yuv', yuv)
    ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)
    cv.imshow('ycrcb', ycrcb)


print("-------Hello Python-------")
src = cv.imread('D:/OpenCV/opencv-python/xiexie.png')
cv.namedWindow('input image', cv.WINDOW_AUTOSIZE)
cv.imshow('input image', src)
# color_space_demo(src)
extrace_object_demo()

# 通道分离
b, g, r = cv.split(src)
cv.imshow('blue', b)
cv.imshow('green', g)
cv.imshow('red', r)

# 针对某一通道赋值,
src[:, :, 2] = 0
# 通道合并
src = cv.merge([b, g, r])
cv.imshow('changed image', src)

cv.waitKey(0)
cv.destroyAllWindows()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值