python:opencv-图像的HSV及处理

HSV

  • H:色彩,opencv中的范围为0-180
  • S:饱和度,opencv中的范围为0-255
  • V:亮度,opencv中的范围为0-255

对HSV图像进行处理——提取特定的颜色部分

  • 这里对克撒的原画中的蓝色部分进行提取
    1. 将图片转换为hsv
    2. 对hsv图片进行蓝色的提取,作为mask
    3. 对原图片进行按位与运算,mask作为操作掩码,8 位单通道数组(uint8),即指定要更改的输出数组的元素。
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
29
import numpy as np
import cv2

urza = cv2.imread('C:\\Users\\Administrator\\Pictures\\4.jpg')
urza = cv2.resize(urza,(600,400))#转换尺寸
cv2.imshow('Urza',urza)

urza_gray = cv2.cvtColor(urza,code = cv2.COLOR_BGR2GRAY)#转换为灰度图
cv2.imshow('Urza_Gray',urza_gray)

urza_hsv = cv2.cvtColor(urza,code=cv2.COLOR_BGR2HSV)#转换为hsv图片
cv2.imshow('Urza_HSV',urza_hsv)
#转换成hsv后,我们就可以根据颜色提取图片中的信息

#从克撒的原画提取蓝色
#先定义提取的蓝色的范围
# H:0-180色彩 S:0-255饱和度 V:0-255亮度
lower_blue = np.array([100,90,46])
height_blue = np.array([124,255,255])

#提取出来
urza_blueMask = cv2.inRange(urza_hsv,lower_blue,height_blue)
cv2.imshow('Urza_blueMask',urza_blueMask)
#根据mask来从原画中提取蓝色部分
urza_res = cv2.bitwise_and(urza,urza, mask=urza_blueMask)
cv2.imshow('Urza_res',urza_res)

cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.inRange(img,lower,higher) : 判断图片各个部分是否在色彩范围内,图片在色彩范围内的部分为1(白色),范围外的部分为0(黑色),返回一个图片实例。
  • cv2.cvtColor:将一张图片转换为另一种颜色空间的图片:第二个参数code=…即为模式
    • cv2.COLOR_BGR2GRAY :转换为灰度图
    • cv2.COLOR_BGR2HSV :转换为hsv

运行结果: