zoukankan      html  css  js  c++  java
  • OpenCV学习笔记(5)——颜色空间转换

    • 学习如歌对图像进行颜色空间转换,从BGR到灰度图,或者从BGR到HSV等
    • 创建一个程序用来从一幅图像中获取某个特定颜色的物体

    1.转换颜色空间

      OpenCV中有超过150种进行颜色空间转化的方法,但是实际上经常用到的也就两种:BGR<->Gray,BGR<->HSV

      要用的函数是cv2.cvtColor(input_img,flag)flag就是转换类型

      cv2.COLOR_BGR2GRAY 就是BGR<->Gray转换

      cv2.COLOR_BGR2HSV 就是BGR<->HSV的转化

    (介绍一下HSV格式,H指色彩/色度,取值[0,179],S是饱和度[0,255],V是亮度[0,255]。不同软件使用的值可能不同,所以当需要拿OpenCV的HSV值与别的软件的HSV值进行对比时要注意归一化)

    也可以用一下代码获得所有可用的flag

    import cv2

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

    2.实现物体的跟踪

      在知道如何将BGR转换到HSV后,就可以利用这一点来提取带有某个特定颜色的物体。在HSV的颜色空间中要比BGR空间中个更容易表示某一个特定颜色。我们先尝试提取一个蓝色的物体,步骤如下:

    • 从视频中获取每一帧图像
    • 将图像转化到HSV空间
    • 设置HSV阈值到蓝色范围
    • 获取蓝色物体,还可以做更多的事

    代码如下:

    # -*- coding:utf-8 -*-

    import numpy as np
    import cv2

    cap = cv2.VideoCapture(0)

    while True:
    ret,frame = cap.read()

    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)

      #对原图像和掩码进行AND运算
    res = cv2.bitwise_and(frame,frame,mask = mask)

      #显示图像
    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    k = cv2.waitKey(5)
    if k == 27:
    break

    cv2.destroyAllWindows()

    3. 怎么找到想要的颜色的阈值范围

    其实就是巧妙利用cvtColor这个函数。比如要找一个绿色的HSV值:

    import numpy as np
    import cv2

    #先创建的一个绿色的像素点,注意此时是BGR
    green = np.uint8([[[0,255,0]]])#这里必须用三层括号,对应图像矩阵,图像行,像素点BGR值

    #然后用函数转换即可获得想要的阈值
    hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
    print( hsv_green)
    #然后使用上下浮动一个范围(如100)来作为上下阈值
  • 相关阅读:
    支付宝生活号内置浏览器长按保存二维码
    Web前端发展史
    ES6语法
    Java多线程
    Java基础知识
    静态库和动态库的使用
    Gcc的使用
    Vim的使用
    力扣345. 反转字符串中的元音字母
    力扣605. 种花问题
  • 原文地址:https://www.cnblogs.com/zodiac7/p/9279595.html
Copyright © 2011-2022 走看看