Gray和BGR<-->HSV。要用到的函數是:cv2.cvtColor(inp" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

OpenCV-Python學習筆記(六):顏色空間轉換(Changing

系統 1798 0

OpenCV 圖像處理之顏色空間轉換
目標
? 你將學習如何對圖像進行顏色空間轉換,比如從 BGR 到灰度圖,或者從BGR 到 HSV 等。
? 我沒還要創建一個程序用來從一幅圖像中獲取某個特定顏色的物體。
? 我們將要學習的函數有: cv2.cvtColor(), cv2.inRange() 等。

1.轉換顏色空間


在 OpenCV 中有超過 150 種進行顏色空間轉換的方法。但是我們經常用到的也就兩種: BGR<-->Gray 和 BGR<-->HSV。
要用到的函數是: cv2.cvtColor(input_image,flag) ,其中 flag就是轉換類型。

對于 BGR->Gray 的轉換,我們要使用的 flag 就是 cv2.COLOR_BGR2GRAY
同樣對于 BGR->HSV 的轉換,我們用的 flag 就是 cv2.COLOR_BGR2HSV。 ?


注意:在 OpenCV 的 HSV 格式中,?H(色彩/色度)的取值范圍是 [0, 179],S(飽和度)的取值范圍 [0, 255], V(亮度)的取值范圍 [0, 255]。但是不同的軟件使用的值可能不同。所以當你需要拿 OpenCV 的 HSV 值與其他軟件的 HSV 值進行對比時,一定要記得歸一化。
?

2 物體跟蹤
?

現在我們知道怎樣將一幅圖像從 BGR 轉換到 HSV 了,我們 可以利用這一點來提取帶有某個特定顏色的物體 。在 HSV 顏色空間中要比在 BGR 空間中更容易表示一個特定顏色。在下面的程序中,我們要提取的是一個藍色的物體。下面就是就是我們要做的幾步:

? 從視頻中獲取每一幀圖像
? 將圖像轉換到 HSV 空間
? 設置 HSV 閾值到藍色范圍。
? 獲取藍色物體,當然我們還可以做其他任何我們想做的事,比如:在藍色物體周圍畫一個圈。
代碼如下,為簡單起見,省略了從視頻中獲取每一幀圖像,直接讀入圖像:

            
              import cv2
import numpy as np

img = cv2.imread(r'D:\OpenCV_Python\chepai.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL)

lower_blue = np.array([120, 100, 100])
upper_blue = np.array([179, 255, 255])


mask = cv2.inRange(hsv, lower_blue, upper_blue)

res = cv2.bitwise_and(img, img, mask=mask)

cv2.imshow('image', img)
cv2.imshow('mask', mask)
cv2.imshow('res', res)

cv2.waitKey(0)
cv2.destroyAllWindows()
            
          

結果如下圖:

OpenCV-Python學習筆記(六):顏色空間轉換(Changing Colorspaces)_第1張圖片

注意:圖像中仍然有一些噪音,我們會在后面的章節中介紹如何消減噪音。


注意:這是物體跟蹤中最簡單的方法。當你學習了輪廓之后,你就會學到更多相關知識,那是你就可以找到物體的重心,并根據重心來跟蹤物體,僅僅在攝像頭前揮揮手就可以畫出同的圖形,或者其他更有趣的事。

3 怎樣找到要跟蹤對象的 HSV 值?

在上述示例中,我們要用到一個關鍵的參數,即要跟蹤的對象的HSV值,但是怎樣找到要跟蹤對象的 HSV 值呢?
在OpenCV中,可以這樣做:(以標準紅綠藍為例)

            
              import cv2
import numpy as np

“”“
# 注意:下面代碼里不能用 [0,255,0],而要用 [[[0,255,0]]]
# 這里的三層括號應該分別對應于 cvArray, cvMat, IplImage
“””

blue = np.uint8([[[255, 0, 0]]])
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
print('hsv_blue : ', hsv_blue)

green = np.uint8([[[0, 255, 0]]])
hsv_green = cv2.cvtColor(green, cv2.COLOR_BGR2HSV)
print('hsv_green : ', hsv_green)

red = np.uint8([[[0, 0, 255]]])
hsv_red = cv2.cvtColor(red, cv2.COLOR_BGR2HSV)
print('hsv_red : ', hsv_red)
            
          

?結果如下:

OpenCV-Python學習筆記(六):顏色空間轉換(Changing Colorspaces)_第2張圖片

這樣,就大概知道了對應HSV的值的范圍,現在你可以分別用 [H-100, 100, 100] 和 [H+100, 255, 255] 做上
下閾值。除了這個方法之外,你可以使用任何其他圖像編輯軟件(例如 GIMP、Photoshop)或者Halcon或者在線轉換軟件找到相應的 HSV 值,但是最后別忘了調節 HSV 的范圍。
?

?這里以OpenCV logo為例,提取其中的藍色部分:

            
              import cv2
import numpy as np

img = cv2.imread('opencv_logo.jpg')

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

lower_blue = np.array([100, 100, 100])
upper_blue = np.array([140, 255, 255])


mask = cv2.inRange(hsv, lower_blue, upper_blue)

res = cv2.bitwise_and(img, img, mask=mask)

cv2.imshow('image', img)
cv2.imshow('mask', mask)
cv2.imshow('res', res)

cv2.waitKey(0)
cv2.destroyAllWindows()
            
          

結果如圖:

OpenCV-Python學習筆記(六):顏色空間轉換(Changing Colorspaces)_第3張圖片

?

參考文獻:《OpenCV-Python 中文教程》(段力輝 譯)

圖片來源于網絡,侵刪


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99爱国产| 视频在线观看91 | 免费人成黄页网站在线观看 | 99精彩免费观看 | 国产婷婷丁香久久综合 | 精品国产高清a毛片无毒不卡 | 亚洲人成在线免费观看 | 久草在线在线观看 | 亚洲欧美中日韩中文字幕 | 国产伦精品一区二区 | 欧美整片在线观看 | 国产精品一区二区四区 | 久久精品一 | 香蕉一级视频 | 快色视频网站 | 3d动漫免费一区二区三区 | 99精品国产在现线免费 | 四虎色影院 | 美女黄色免费在线观看 | 婷婷色在线 | 国产精品永久免费自在线观看 | 中文字幕无线码中文字幕免费 | 在线 | 一区二区三区 | 99久久精品无码一区二区毛片 | 国产真实强j视频在线观看 国产真实偷乱视频在线观看 | 成年女人18毛片毛片免费 | 九九热精品免费视频 | 久久天天躁狠狠躁夜夜2020一 | 久热这里只精品热在线观看 | 国产精品9999 | 亚洲国产高清视频在线观看 | 一级a做爰片欧欧美毛片4 | 久久九九精品一区二区 | 国产精品成人第一区 | 国产成人乱码一区二区三区在线 | 国产精品视频一区二区三区不卡 | 美女黄色免费在线观看 | 鲁丝一区| 午夜三级影院 | 99视频在线观看视频一区 | 色片网站在线观看 |