opencv入門系列教學(七)改變顏色空間、提取彩色對象


0.序言

之前的博客里我們介紹了opencv在圖像上的基本操作,下面我們來進行稍微深入一點的介紹,從這里開始我們可以發現opencv庫能給我們帶來的更多更有趣的功能。從現在開始,我們將逐步深入了解opencv庫中對圖像處理的一些高級方式。

  • 在這篇博客中,我們將學習如何將圖像在色彩空間之間的轉換,例如BGR轉換成灰色,BGR轉換成HSV等
  • 此外,我們還將創建一個應用程序,以提取視頻中的彩色對象
  • 我們還將學習以下功能:cv.cvtColor,**cv.inRange**等

1.改變顏色空間

OpenCV中有超過150種顏色空間轉換的方法。但是我們只有兩個最廣泛使用的,BGR↔灰色和BGR↔HSV。
對於顏色轉換,我們使用cv函數。

cvtColor(input_image, flag)

其中flag決定轉換的類型。
例如對於BGR→灰度轉換,我們讓flag標記為cv.COLOR_BGR2GRAY。類似地,對於BGR→HSV,我們讓flag標記為cv.COLOR_BGR2HSV。要獲取其他標記,只需在Python終端中運行以下命令:

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

需要注意的一點,HSV的色相范圍為[0,179],飽和度范圍為[0,255],值范圍為[0,255]。且不同的軟件里使用不同的規模,這點細節需要注意。

2.對象追蹤

因為在HSV空間中比在BGR顏色空間中更容易表示顏色。現在我們知道了如何將BGR圖像轉換成HSV,通過這種方式,我們可以就可以提取視頻或圖片中一個某個有顏色的對象。

例如下面的應用程序所示,我們將嘗試提取一個藍色的對象。方法如下:

  1. 取視頻的每一幀 。
  2. 轉換從BGR到HSV顏色空間 。
  3. 對HSV圖像設置藍色范圍的閾值。
  4. 單獨提取藍色對象。

代碼如下所示import cv2 as cv

import numpy as np
cap = cv.VideoCapture(0)
while(1):
    # 讀取幀
    _, frame = cap.read()
    # 轉換顏色空間 BGR 到 HSV
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    # 定義HSV中藍色的范圍
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])
    # 設置HSV的閾值使得只取藍色
    mask = cv.inRange(hsv, lower_blue, upper_blue)
    # 將掩膜和圖像逐像素相加
    res = cv.bitwise_and(frame,frame, mask= mask)
    cv.imshow('frame',frame)
    cv.imshow('mask',mask)
    cv.imshow('res',res)
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

  

效果就如圖所示:

注意:圖像中有一些噪點。我們將在后面的章節中看到如何刪除它們。 這是對象跟蹤中最簡單的方法。一旦學習了輪廓的功能,我們就可以做很多事情,例如找到該對象的質心並使用它來跟蹤對象等,這也是opencv庫的強大之處。


免責聲明!

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



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