天天看點

Opencv圖像處理之改變顔色空間1.如何将圖像從一個色彩空間轉換到另一個,像BGR–》灰色,BGR–》HSV 等2.建立應用程式,提取視訊中的彩色對象

本節中,你将學習到

如何改變圖像顔色空間

  • 1.如何将圖像從一個色彩空間轉換到另一個,像BGR--》灰色,BGR--》HSV 等
  • 2.建立應用程式,提取視訊中的彩色對象

1.如何将圖像從一個色彩空間轉換到另一個,像BGR–》灰色,BGR–》HSV 等

OpenCV中有超過150種顔色空間轉換方法。但是我們将研究隻有兩個最廣泛使用的,BGR↔灰色和BGR↔HSV。

對于顔色轉換,我們使用cv函數。cvtColor(input_image, flag),其中flag決定轉換的類型。

對于BGR→灰階轉換,我們使用标志cv.COLOR_BGR2GRAY。類似地,對于BGR→HSV,我們使用标志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]。不同的軟體使用不同的規模。

轉換顔色空間示例:

#轉換顔色空間
def color_space_demo(image):
    #将顔色空間從BGR2轉換到GRAY
    gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    cv.imshow("gray",gray)
    # 将顔色空間從BGR2轉換到HSV
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
    cv.imshow("hsv", hsv)
    # 将顔色空間從BGR2轉換到YUV
    yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)
    cv.imshow("yuv", yuv)
    # 将顔色空間從BGR2轉換到YCrCb
    YCrCb=cv.cvtColor(image,cv.COLOR_BGR2YCrCb)
    cv.imshow("YCrCb",YCrCb)
           

2.建立應用程式,提取視訊中的彩色對象

現在我們知道了如何将BGR圖像轉換成HSV,我們可以使用它來提取一個有顔色的對象。在HSV中比在BGR顔色空間中更容易表示顔色。在我們的應用程式中,我們将嘗試提取一個藍色的對象。方法如下: - 取視訊的每一幀 - 轉換從BGR到HSV顔色空間 - 我們對HSV圖像設定藍色範圍的門檻值 - 現在單獨提取藍色對象,我們可以對圖像做任何我們想做的事情。

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
    # 讀取幀
    ret, 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圖像處理之改變顔色空間1.如何将圖像從一個色彩空間轉換到另一個,像BGR–》灰色,BGR–》HSV 等2.建立應用程式,提取視訊中的彩色對象

圖像掩膜是用標明的圖像、圖形或物體,對處理的圖像(全部或局部)進行遮擋,來控制圖像處理的區域或處理過程。

數字圖像進行中,掩模為二維矩陣數組,有時也用多值圖像,圖像掩模主要用于:

①提取感興趣區,用預先制作的感興趣區掩模與待處理圖像相乘,得到感興趣區圖像,感興趣區内圖像值保持不變,而區外圖像值都為0。

②屏蔽作用,用掩模對圖像上某些區域作屏蔽,使其不參加處理或不參加處理參數的計算,或僅對屏蔽區作處理或統計。

③結構特征提取,用相似性變量或圖像比對方法檢測和提取圖像中與掩模相似的結構特征。

④特殊形狀圖像的制作。

在所有圖像基本運算的操作函數中,凡是帶有掩膜(mask)的處理函數,其掩膜都參與運算(輸入圖像運算完之後再與掩膜圖像或矩陣運算)。

利用掩膜(mask)進行“與”操作,即掩膜圖像白色區域是對需要處理圖像像素的保留,黑色區域是對需要處理圖像像素的剔除,其餘按位操作原理類似隻是效果不同而已。

3.如何找到要追蹤的HSV值?

這是在stackoverflow.com上發現的一個常見問題。它非常簡單,你可以使用相同的函數cv.cvtColor()。你隻需傳遞你想要的BGR值,而不是傳遞圖像。例如,要查找綠色的HSV值,請在Python終端中嘗試以下指令:

green = np.uint8([[[0,255,0 ]]])
>>> hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV)
>>> print( hsv_green )
[[[ 60 255 255]]]
           

部分内容轉自原文連結:https://blog.csdn.net/Lily_9/article/details/83143120