opencv-hsv图像分离合并

python3-opencv库(3)--图片颜色空间转换,利用HSV进行物体跟踪,图像通道分离与合并

版权声明:转载请注明原作者及出处

  1.  
    from cv2 import cv2 #或者import cv2
  2.  
    import numpy as np
  3.  
     
  4.  
    """H(hue)色调 0~180;S(saturation)饱和度 0~255;V(value) 0~255
  5.  
    具体参见HSV颜色空间的百度百科"""
  6.  
    def extract_object_demo():
  7.  
    """通过颜色过滤的方法来跟踪捕获视屏中的物体"""
  8.  
    """本函数就是一个追踪视频中绿色物体的程序"""
  9.  
    capture = cv2.VideoCapture("D:/movie/星际牛仔BD/星际牛仔Session8ワルツ_フォー_ヴィーナスWaltzForVenus.MP4")
  10.  
        #选择打开一个视屏
  11.  
        while True:
  12.  
    ret, frame = capture.read()
  13.  
    #从视频中一帧一帧地读取图像
  14.  
    if ret == False:
  15.  
    break
  16.  
    #判断是否读取正确,读取失败(比如视屏结束)则会终止循环,所以ret是个判断读取是否正确的返回量
  17.  
    hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
  18.  
    #将视屏每一帧转换成HSV图像
  19.  
    lower_hsv = np.array([35, 43, 46],dtype=np.uint8)
  20.  
    #设置HSV范围下限(是长度为3的1D数组,三个元素分别表示H,S,V的下限)
  21.  
    upper_hsv = np.array([77, 255, 255],dtype=np.uint8)
  22.  
    #设置HSV范围上限(是长度为3的1D数组,三个元素分别表示H,S,V的上限)
  23.  
    #hsv处于该范围内的就是广义的绿色,我们就是为了把绿色筛选出来,颜色与HSV值得对应见下方的表
  24.  
    mask = cv2.inRange(hsv,lower_hsv,upper_hsv)
  25.  
    #第一参数为待处理的图像,第二参数为HSV范围下限,第三参数为HSV范围上限
  26.  
    '''cv2.inRange()方法对每一帧图像进行处理,凡是HSV值处在范围内的像素,
  27.  
    一律为白色,范围外的一律为黑色,最后返回一张二值化的图,所谓二值化,就
  28.  
    是全图只有黑白两色,即mask'''
  29.  
    cv2.imshow("video_initia",frame)
  30.  
    cv2.imshow("video_hsv",hsv)
  31.  
    cv2.imshow("video_mask",mask)
  32.  
    k = cv2.waitKey(20) #设置成按Esc键退出循环
  33.  
    if k == 27:
  34.  
    break
  35.  
     
  36.  
    def color_space_demo(img):
  37.  
    """颜色空间的转换BGR--->HSV"""
  38.  
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  39.  
    #转换成灰度图
  40.  
    cv2.imshow("gray_img",gray)
  41.  
     
  42.  
    hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
  43.  
    #转换成HSV
  44.  
    cv2.imshow("hsv_img",hsv)
  45.  
     
  46.  
    yuv = cv2.cvtColor(img,cv2.COLOR_BGR2YUV)
  47.  
    #转换成YUV
  48.  
    cv2.imshow("yuv_img",yuv)
  49.  
     
  50.  
    ycrcb = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)
  51.  
    #转换成YCrCb
  52.  
    cv2.imshow("ycrcb_img",ycrcb)
  53.  
     
  54.  
     
  55.  
    print("----------hello python!----------")
  56.  
    src = cv2.imread("Z.PNG")
  57.  
    t1 = cv2.getTickCount()
  58.  
    #=======================================================
  59.  
    color_space_demo(src) #演示各种颜色空间之间的转换
  60.  
    extract_object_demo() #演示通过颜色过滤来跟踪视频中的物体
  61.  
    #=======================================================
  62.  
    t2 = cv2.getTickCount()
  63.  
    time = (t2-t1)*1000/cv2.getTickFrequency()
  64.  
    print("耗时:%s" % time)
  65.  
    cv2.waitKey(0)
  66.  
     
  67.  
    cv2.destroyAllWindows()
如何知道各种颜色对应的HSV范围?参见下表
由于HSV是基于人类对颜色感觉而定制的标准,所以每种颜色都是用一个范围来表示

三通道图像的通道分离以及三个单通道图像的通道合并
  1.  
    from cv2 import cv2 #或者import cv2
  2.  
    import numpy as np
  3.  
     
  4.  
     
  5.  
    print("--------------------hello python!--------------------")
  6.  
    src = cv2.imread("Z.PNG")
  7.  
    t1 = cv2.getTickCount()
  8.  
    #====================================================================
  9.  
    b, g, r = cv2.split(src) #通道分离,把一副三通道图像分成3个单通道图像
  10.  
     
  11.  
    cv2.imshow("blue",b) #展示分离后每个通道作为单通道图像的灰度图
  12.  
    cv2.imshow("green",g)
  13.  
    cv2.imshow("red",r)
  14.  
     
  15.  
    img = cv2.merge([b,g,r]) #通道合并
  16.  
    cv2.imshow("merge_img",img) #展示合并后的图
  17.  
    #====================================================================
  18.  
    t2 = cv2.getTickCount()
  19.  
    time = (t2-t1)*1000/cv2.getTickFrequency()
  20.  
    print("耗时:%s" % time)cv2.waitKey(0)cv2.destroyAllWindows()
posted @ 2018-11-21 10:56  IT十八严  阅读(2231)  评论(0编辑  收藏  举报