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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM