opencv-python-学习笔记八(颜色空间转化和目标跟踪)

1.颜色空间转换

OpenCV中有150多种颜色空间转换方法。但是我们将研究只有两个最广泛使用的,BGR↔Gray 和BGR↔HSV,BGR和灰度图的转换使用 cv2.COLOR_BGR2GRAY ,
BGR和HSV的转换使用 cv2.COLOR_BGR2HSV。在HSV空间中,H表示色彩/色度,取值范围 [0,179],S表示饱和度,取值范围 [0,255],V表示亮度,取值范围 [0,255]。但是不同的软件使用值不同

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

参数:

src:输入图像:8位无符号,16位无符号(CV_16UC…),或单精度浮点。

code:转换方式

dst:与原图像深度大小相同的输出图像。可省略

dstCn:标图像通道数,默认为0,表示由src和code决定。

打印所有的code:

import cv2 as cv


flags = [i for i in dir(cv) if i.startswith('COLOR_')]
print(flags)

函数说明:

该函数将输入图像从一个颜色空间转换为另一个颜色空间。

举例

import matplotlib.pyplot as plt
import cv2

img_BGR = cv2.imread('2.jpg')  # BGR
plt.subplot(331), plt.imshow(img_BGR), plt.axis('off'), plt.title('BGR')

img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)
plt.subplot(332), plt.imshow(img_RGB), plt.axis('off'), plt.title('RGB')

img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)
plt.subplot(333), plt.imshow(img_GRAY), plt.axis('off'), plt.title('GRAY')

img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)
plt.subplot(334), plt.imshow(img_HSV), plt.axis('off'), plt.title('HSV')

img_YcrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb)
plt.subplot(335), plt.imshow(img_YcrCb), plt.axis('off'), plt.title('YcrCb')

img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS)
plt.subplot(336), plt.imshow(img_HLS), plt.axis('off'), plt.title('HLS')

img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ)
plt.subplot(337), plt.imshow(img_XYZ), plt.axis('off'), plt.title('XYZ')

img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB)
plt.subplot(338), plt.imshow(img_LAB), plt.axis('off'), plt.title('LAB')

img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV)
plt.subplot(339), plt.imshow(img_YUV), plt.axis('off'), plt.title('YUV')
plt.show()

cv2.imshow('gray', img_GRAY)

k = cv2.waitKey(0)  # 始终检测键盘
if k == 27:  # 按ESC退出
    cv2.destroyAllWindows()

 

2.目标跟踪

现在我们知道了如何将BGR图像转换为HSV,我们可以使用它来提取一个彩色对象。HSV的彩色空间比BGR的空间更容易表示一个颜色。在以下案例中,我们尝试提取一个蓝色对象。

2.1提取流程

  • 提取取视频的每一帧
  • 从BGR转换到HSV颜色空间
  • 我们对HSV图像设置一个蓝色范围的阈值
  • 提取

3.如何查找BGR值的HSV,同时设定目标跟踪中的阈值

查找BGR的HSV值

方法一:

import cv2 as cv
import numpy as np


# 同样可以使用函数cv.cvtColor()。此时只需传递所需的BGR值,而不是传递图像。例如,要查找绿色的HSV值,怎运行以下程序
green = np.uint8([[[0, 255, 0]]])
hsv_green = cv.cvtColor(green, cv.COLOR_BGR2HSV)
print(hsv_green) # [[[60 255 255]]]

方法二:

设定阈值

上述所得结果[H- 10,100,100]和[H+ 10,255, 255]分别作为下界和上界。方法一种所得的  H  即为60.

原文地址:https://www.cnblogs.com/blog-xyy/p/11184703.html