OpenCV學習筆記(5)——顏色空間轉換


  • 學習如歌對圖像進行顏色空間轉換,從BGR到灰度圖,或者從BGR到HSV等
  • 創建一個程序用來從一幅圖像中獲取某個特定顏色的物體

1.轉換顏色空間

  OpenCV中有超過150種進行顏色空間轉化的方法,但是實際上經常用到的也就兩種:BGR<->Gray,BGR<->HSV

  要用的函數是cv2.cvtColor(input_img,flag)flag就是轉換類型

  cv2.COLOR_BGR2GRAY 就是BGR<->Gray轉換

  cv2.COLOR_BGR2HSV 就是BGR<->HSV的轉化

(介紹一下HSV格式,H指色彩/色度,取值[0,179],S是飽和度[0,255],V是亮度[0,255]。不同軟件使用的值可能不同,所以當需要拿OpenCV的HSV值與別的軟件的HSV值進行對比時要注意歸一化)

也可以用一下代碼獲得所有可用的flag

import cv2

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

 

2.實現物體的跟蹤

  在知道如何將BGR轉換到HSV后,就可以利用這一點來提取帶有某個特定顏色的物體。在HSV的顏色空間中要比BGR空間中個更容易表示某一個特定顏色。我們先嘗試提取一個藍色的物體,步驟如下:

  • 從視頻中獲取每一幀圖像
  • 將圖像轉化到HSV空間
  • 設置HSV閾值到藍色范圍
  • 獲取藍色物體,還可以做更多的事

代碼如下:

# -*- coding:utf-8 -*-

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while True:
ret,frame = cap.read()

hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)

  #設置藍色閾值范圍
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])

  #根據閾值構建掩碼
mask = cv2.inRange(hsv,lower_blue,upper_blue)

  #對原圖像和掩碼進行AND運算
res = cv2.bitwise_and(frame,frame,mask = mask)

  #顯示圖像
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k = cv2.waitKey(5)
if k == 27:
break

cv2.destroyAllWindows()

3. 怎么找到想要的顏色的閾值范圍

其實就是巧妙利用cvtColor這個函數。比如要找一個綠色的HSV值:

import numpy as np
import cv2

#先創建的一個綠色的像素點,注意此時是BGR
green = np.uint8([[[0,255,0]]])#這里必須用三層括號,對應圖像矩陣,圖像行,像素點BGR值

#然后用函數轉換即可獲得想要的閾值
hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print( hsv_green)
#然后使用上下浮動一個范圍(如100)來作為上下閾值

 


免責聲明!

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



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