• OpenCV 的颜色空间转换


     1 # coding: utf-8
     2  
     3 '''
     4 第13章主要介绍:颜色空间转换
     5 '''
     6  
     7 import cv2
     8 import numpy as np
     9  
    10 '''
    11 经常用到的颜色空间转换是: BGR<->Gray 和 BGR<->HSV
    12 cv2.cvtColor(input_image , flag),flag是转换类型:cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2HSV
    13 HSV(Hue , Saturation , Value):色调,饱和度,明度
    14 色度H:用角度度量,取值范围为0~360,红色开始按逆时针方向计算,红色为0度,绿色为120度,蓝色为240度
    15 饱和度S:接近光谱色的程度,颜色可以看成是光谱色与白色混合结果,光谱色占的比例愈大,颜色接近光谱色的程度
    16         越高,颜色饱和度就越高。光谱色中白色成分为0,饱和度达到最高,取值范围0%~100%,值越大,颜色越饱和
    17 明度V:表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,与物体的透射比有关,取值
    18       范围为0%(黑)~100%(白)
    19 RGB面向硬件,HSV面向用户
    20 在Opencv中
    21 H色度取值范围是[0,179]
    22 S饱和度的取值范围是[0,255]
    23 V明度的取值范围是[0,255]
    24 拿opencv的HSV值与其他软件的HSV值进行对比时,要归一化
    25 '''
    26  
    27 #获取颜色转换中所有可以使用的flag
    28 def getColorConvertFlag():
    29     # dir() 查找module下的所有类
    30     flags = [i for i in dir(cv2) if i.startswith("COLOR_") ]
    31     print(flags)
    32  
    33 '''
    34 物体跟踪,可以将图像从BGR转换到HSV后,提取某个特定颜色的物体
    35 提取蓝色物体步骤:
    36 1从视频中获取每一帧图像
    37 2将图像转换到HSV空间
    38 3设置HSV阈值到蓝色范围
    39 4获取蓝色物体
    40 '''
    41 def trackObject():
    42     cap = cv2.VideoCapture(0)
    43     while(1):
    44         ret , frame = cap.read()
    45  
    46         #转换为hsv
    47         hsv = cv2.cvtColor(frame , cv2.COLOR_BGR2HSV)
    48         #注意这里的上下限都是一个含有HSV的三元组
    49         lower_blue = np.array([110 , 50 , 50])
    50         upper_blue = np.array([130 , 255 , 255])
    51         '''
    52         cv2.inRange(src , lowerb , upperb[,dst])
    53         作用:更改函数对某个单通道中的元素检查其值是否在范围中
    54         src:输入数组,lowerb:包含低边界的数组,upperb:包含高边界的数组,dst:输出数组
    55         如果src(I)符合范围,则dst(I)被设置为255,也就是说dst返回的是非黑即白的图像,而且符合要求
    56          的部分是白色的
    57         '''
    58         #构建物体掩膜(黑白部分),注意这里要使用hsv
    59         mask = cv2.inRange(hsv , lower_blue , upper_blue)
    60         #对原图像和掩膜进行位运算
    61         res = cv2.bitwise_and(frame ,frame , mask = mask)
    62         cv2.imshow("frame" , frame)
    63         cv2.imshow("mask" , mask)
    64         cv2.imshow("res" , res)
    65         k = cv2.waitKey(5) & 0xFF
    66         #ASCII中27是esc
    67         if k == 27:
    68             break
    69     cv2.destroyAllWindows()
    70  
    71  
    72 '''
    73 如何找到要跟踪对象的HSV值,使用cv2.cvtColor,传入的参数是(你想要的)BGR值而不是一幅图。
    74 例如找到绿色的HSV值,在终端输入以下命令
    75 '''
    76 def getHSV():
    77     '''
    78     三层括号对应于:cvArray,cvMatIplImage
    79     也就是第一个括号是数组,第二个是矩阵,第三个是图像
    80     '''
    81     green = np.uint8( [ [ [0 , 255 , 0] ] ])
    82     hsv_green = cv2.cvtColor(green , cv2.COLOR_BGR2HSV)
    83     print(hsv_green)
    84     '''
    85     可以分别用[H-100 , 100 , 100]和[H+100 , 255 , 255]做上下阈值,也可以用图像编辑软件(GIMP)
    86     '''
    87  
    88  
    89  
    90  
    91  
    92  
    93  
    94  
    95 if __name__ == "__main__":
    96     #getColorConvertFlag()
    97     #trackObject()
    98     getHSV()
    99  
  • 相关阅读:
    iOS 疑难杂症 — — 复制 Storyborad 莫名崩溃
    【Swift 2.1】共享文件操作小结(iOS 8 +)
    【Swift】 应用内显示 AppStore 某个应用的详情
    【Swift】iOS开发笔记(一)
    【Swift 2.0】实现简单弹幕功能
    站长名站
    Future home of something quite cool.
    大神们都在用的两个国外的免费离线下载:Rain&amp; LoadBT
    Amazon Publisher Studio让产品推广更简单
    人脉是设计出来的,进入高端人脉圈的方法
  • 原文地址:https://www.cnblogs.com/jingsupo/p/9812218.html
Copyright © 2020-2023  润新知