ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python-颜色空间转换

2021-06-10 16:04:22  阅读:218  来源: 互联网

标签:颜色 Python cv2 matplotlib HSV mpimg import 255 转换


转换颜色空间

在OpenCV 中有超过150 中进行颜色空间转换的方法。但是你以后就会
发现我们经常用到的也就两种:BGR<->Gray 和BGR<->HSV。

我们要用到的函数是:cv2.cvtColor(input_image,flag),其中flag
就是转换类型。

对于BGR<->Gray 的转换,我们要使用的flag 就是cv2.COLOR_BGR2GRAY。
同样对于BGR<->HSV 的转换,我们用的flag 就是cv2.COLOR_BGR2HSV。
你还可以通过下面的命令得到所有可用的flag。

import numpy as np
import cv2
from matplotlib import pyplot as plt
import matplotlib.image as mpimg # mpimg 用于读取图片

flags=[i for i in dir(cv2) if i.startswith('COLOR_')]
#str.startswith()函数:用于判断一个字符串是否为某个字符串的开头
#dir()函数:带参数时,返回参数的属性、方法列表
print(flags)

image

image

物体跟踪

现在我们知道怎样将一幅图像从BGR 转换到HSV 了,我们可以利用这
一点来提取带有某个特定颜色的物体。在HSV 颜色空间中要比在BGR 空间
中更容易表示一个特定颜色。在我们的程序中,我们要提取的是一个蓝色的物体。下面就是就是我们要做的几步:

• 从视频中获取每一帧图像
• 将图像转换到HSV 空间
• 设置HSV 阈值到蓝色范围。
• 获取蓝色物体,当然我们还可以做其他任何我们想做的事,比如:在蓝色物体周围画一个圈。

import numpy as np
import cv2
from matplotlib import pyplot as plt
import matplotlib.image as mpimg # mpimg 用于读取图片

cap=cv2.VideoCapture(0)

while(1):

    #获取每一帧
    ret,frame=cap.read()

    #转换到HSV
    hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)

    #设定蓝色的阈值
    lower_blue=np.array([110,50,50])
    upper_blue=np.array([130,255,255])

    #根据阈值构建掩模
    mask=cv2.inRange(hsv,lower_blue,upper_blue)
    #第一个参数:hsv指的是原图
    #第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0
    #第三个参数:upper_red指的是图像中高于这个upper_red的值,图像值变为0
    #而在lower_red~upper_red之间的值变成255

    res=cv2.bitwise_and(frame,frame,mask=mask)

    #显示图像
    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    k=cv2.waitKey(5) & 0xFF
    if k==27:
        break
#关闭窗口
cv2.destroyAllWindows()

image

怎样找到要跟踪对象的HSV 值?

函数cv2.cvtColor() 也可以用到这里。但是现在你要传入的参数是(你想要的)BGR 值而不是一副图。例如,我们要找到绿色的HSV 值,我们只需在终端输入以下命令:

import numpy as np
import cv2
from matplotlib import pyplot as plt
import matplotlib.image as mpimg # mpimg 用于读取图片

green=np.uint8([0,255,0])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)

image

所以不能用[0,255,0],而要用[[[0,255,0]]]

这里的三层括号应该分别对应于cvArray,cvMat,IplImage

import numpy as np
import cv2
from matplotlib import pyplot as plt
import matplotlib.image as mpimg # mpimg 用于读取图片

green=np.uint8([[[0,255,0]]])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print(hsv_green)

image

现在你可以分别用[H-100,100,100] 和[H+100,255,255] 做上下阈值。除了这个方法之外,你可以使用任何其他图像编辑软件(例如GIMP)或者在线转换软件找到相应的HSV 值,但是最后别忘了调节HSV 的范围。

标签:颜色,Python,cv2,matplotlib,HSV,mpimg,import,255,转换
来源: https://www.cnblogs.com/jgg54335/p/14848258.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有