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條評論
主站蜘蛛池模板: 午夜伦4480yy妇女久久久 | 色婷婷精品 | 奇米影视亚洲色图 | 香蕉黄色片 | 曰批免费视频播放在线看片一 | 欧美一级毛片俄罗斯 | 这里只有精品视频 | 欧美一区二区三区免费观看视频 | 久久国产精品老女人 | 日韩高清在线二区 | 亚洲激情在线看 | 亚洲欧美国产另类视频 | 国产免费一区二区三区香蕉精 | 中文字幕亚洲专区 | 99热99re8国产在线播放 | 亚洲精品影院一区二区 | 哥也操| 免费国产一区 | 亚洲精品久久玖玖玖玖 | 亚洲人jizz | 99久久精品国产麻豆 | 国产成人久久综合二区 | 五月激激激综合网色播免费 | 亚洲精品久久久久综合91 | 99精品国产高清自在线看超 | 国产欧美亚洲精品 | 亚洲五月综合网色九月色 | 日本不卡高清免费v日本 | 经典国产乱子伦精品视频 | 四虎8848 | 中文字幕久久久 | 视频1区| 91亚洲国产在人线播放午夜 | 亚洲伊人久久综合一区二区 | 欧美成人怡红院在线观看 | 亚洲精品欧美日本中文字幕 | 九九热国产视频 | 欧美国产精品亚洲精品第一区 | 91情国产l精品国产亚洲区 | a级毛片免费完整视频 | 国产伦精品一区二区三区免费观看 |