【Python+OpenCV入门学习】十一、简单图像处理之颜色空间转化

本篇文章介绍简单图像处理的颜色空间转化。

环境:Windows 7(64)   Python 3.6    OpenCV3.4.2

一、颜色空间转化

主要学习RGB转化为Gray,RGB转化为HSV。学习的函数是cvtColor()。

1.1 cvtColor()函数介绍

函数形式如下:

dst = cv.cvtColor( src, code[, dst[, dstCn]])

功能:将一个图像从一个颜色空间转化为另一个颜色空间。在RGB颜色空间转换情况下,应明确指定通道的顺序(RGB或BGR)。请注意,OpenCV中的默认颜色格式通常称为RGB,但它实际上是BGR(字节相反)。因此,标准(24位)彩色图像中的第一个字节将是8位蓝色分量,第二个字节将为绿色,第三个字节将为红色。

参数:

src:原图像

dst:结果图像。颜色空间转化后的图像

code:颜色空间转化标志符。指定将转化为何种颜色空间。

code的取值如下所示,列举部分常用的,所有的取值请查看ColorConversionCodes

cv.COLOR_BGR2BGRA/cv.COLOR_RGB2RGBA:增加一个alpha通道。

cv.COLOR_BGRA2BGR/cv.COLOR_RGBA2RGB:去掉alpha通道。

cv.COLOR_BGR2RGB/cv.COLOR_RGB2BGR:RGB与BGR之间相互转化。

cv.COLOR_BGR2GRAY/cv.COLOR_RGB2GRAY:转化为灰度图像

 cv.COLOR_BGR2BGR565/ cv.COLOR_RGB2RGB565:RGB图像转化为16为图像(BR都是5bit,G是6bit)

 cv.COLOR_GRAY2BGR565:灰度图像转化为BGR565图像

cv.COLOR_BGR2XYZ:RGB空间转化为XYZ空间

cv.COLOR_BGR2YCrCb:RGB空间转化为YCrCb空间

cv.COLOR_BGR2HSV:RGB空间转化为HSV空间

cv.COLOR_BGR2Lab:RGB空间转化为Lab空间

1.2 代码实现

实现一个简单的功能,将摄像头拍摄的每一帧转化为HSV颜色空间,然后提取出特定颜色的对象,本文提取蓝色区域。用到的筛选函数是inRange(),形式如下:

dst = cv.inRange( src, lowerb, upperb[, dst] )

功能:检查数组元素是否位于lowerb和upperb之间。

参数:

src:输入数组

lowerb:下限

upperb:上限

dst:结果数组,大小和src一样大,数据类型是CV_8U。

所以整个代码如下:

import cv2 as cv
import numpy as np

cap = cv.VideoCapture(0)
while(1):
    # 抓取帧
    _, frame = cap.read()
    #BGR转化为HSV
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    #[110,43,46]~[124,255,255]蓝色区间
    lower_blue = np.array([100,43,46])
    upper_blue = np.array([124,255,255])
    # 筛选
    res = cv.inRange(hsv, lower_blue, upper_blue)
    cv.imshow('frame',frame)
    cv.imshow('res',res)
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()
cap.release()

运行结果如下:

可以看到,左图蓝色部分,在右图中就是白色,左图中其他颜色,在右图中都是黑色。

猜你喜欢

转载自blog.csdn.net/qq_18995069/article/details/83962456
今日推荐