欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python和OpenCV庫實現(xiàn)實時顏色識別系統(tǒng)

 更新時間:2025年06月16日 11:13:12   作者:E-An居士  
這篇文章主要介紹了使用Python和OpenCV庫實現(xiàn)的實時顏色識別系統(tǒng),這個系統(tǒng)能夠通過攝像頭捕捉視頻流,并在視頻中指定區(qū)域內(nèi)識別主要顏色(紅、黃、綠、藍),這種技術(shù)在機器人視覺、自動化檢測和交互式應(yīng)用中有著廣泛的應(yīng)用前景,需要的朋友可以參考下

一、引言

今天我將介紹一個使用Python和OpenCV庫實現(xiàn)的實時顏色識別系統(tǒng)。這個系統(tǒng)能夠通過攝像頭捕捉視頻流,并在視頻中指定區(qū)域內(nèi)識別主要顏色(紅、黃、綠、藍)。這種技術(shù)在機器人視覺、自動化檢測和交互式應(yīng)用中有著廣泛的應(yīng)用前景。

二、系統(tǒng)概述

該系統(tǒng)主要包含以下幾個功能:

  • 實時視頻捕捉
  • 在視頻幀中劃定特定檢測區(qū)域
  • 將檢測區(qū)域轉(zhuǎn)換為HSV色彩空間
  • 分析區(qū)域內(nèi)的色調(diào)(H)值
  • 根據(jù)H值范圍判斷顏色類型
  • 實時顯示結(jié)果

三、代碼解析

1. 導入庫

import cv2

我們只需要導入OpenCV庫,它提供了強大的計算機視覺功能,包括圖像處理和視頻捕捉。

2. 顏色識別函數(shù)

def get_color(img):
    H = []
    color_name = None
    img = cv2.resize(img,(640,400),)
    # 將彩色圖轉(zhuǎn)換為HSV
    HSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    # 畫矩形框
    cv2.rectangle(img,(280,180),(360,260),(0,255,0),2)
    # 依次取出每行每列的H,S,V值放入容器中
    for i in range(280,360):
        for j in range(180,260): H.append(HSV[j,i][0])
    # 分別計算出H,S,V的最大最小
    H_min = min(H);H_max = max(H)
    # 判斷顏色
    if H_min >= 0 and H_max <= 10 or H_min >= 156 and H_max <= 180: color_name='red'
    elif  H_min >= 26 and H_max <= 34 : color_name='yellow'
    elif  H_min >= 35 and H_max <= 77 : color_name='green'
    elif  H_min >= 100 and H_max <= 124 : color_name='blue'
    print(color_name)
    return  img,color_name

函數(shù)功能詳解

圖像預處理

  • 首先將輸入圖像調(diào)整為固定尺寸(640×400),確保處理一致性

色彩空間轉(zhuǎn)換

  • 將BGR格式轉(zhuǎn)換為HSV格式,HSV色彩空間更適合顏色識別
  • H(色調(diào)):表示顏色類型
  • S(飽和度):表示顏色的純度
  • V(亮度):表示顏色的明暗程度

檢測區(qū)域標記

  • 在圖像上繪制一個綠色矩形框(280,180)到(360,260),標識檢測區(qū)域

數(shù)據(jù)采集

  • 遍歷檢測區(qū)域內(nèi)每個像素點,收集所有H值

顏色判斷

  • 計算區(qū)域內(nèi)H值的最小和最大值
  • 根據(jù)H值范圍判斷顏色:
    • 紅色:0-10或156-180
    • 黃色:26-34
    • 綠色:35-77
    • 藍色:100-124

3. 主程序循環(huán)

cap = cv2.VideoCapture(0)
while 1:
    _,frame=cap.read()
    img,cal = get_color(frame)
    cv2.imshow('',img)
    if cv2.waitKey(1) == 27:
        break

視頻捕捉初始化

  • 創(chuàng)建VideoCapture對象,參數(shù)0表示使用默認攝像頭

主循環(huán)

  • 不斷讀取視頻幀
  • 調(diào)用get_color函數(shù)處理每一幀
  • 顯示處理后的圖像
  • 按ESC鍵(ASCII 27)退出程序

四、HSV色彩空間詳解

為什么選擇HSV而不是RGB進行顏色識別?

RGB的局限性

  • RGB三個通道都與亮度相關(guān)
  • 對光照變化敏感
  • 顏色判斷需要同時考慮三個通道

HSV的優(yōu)勢

  • 將顏色信息(H)與亮度(V)、飽和度(S)分離
  • 對光照變化有一定魯棒性
  • 顏色判斷主要依據(jù)H通道

五、顏色范圍設(shè)定

OpenCV中HSV的范圍:

  • H: 0-180 (通常色彩空間為0-360,但OpenCV使用8位存儲,所以除以2)
  • S: 0-255
  • V: 0-255

常見顏色H值范圍:

  • 紅色:0-10和170-180
  • 橙色:11-25
  • 黃色:26-34
  • 綠色:35-77
  • 藍色:100-124
  • 紫色:125-155

可對比如下的顏色范圍圖

六、系統(tǒng)優(yōu)化建議

增加飽和度(S)和亮度(V)的過濾:

  • 可以排除低飽和度(接近灰色)或低亮度(接近黑色)的區(qū)域

使用均值而非極值:

  • 當前使用min/max容易受噪聲影響,可改為計算平均值

擴大檢測區(qū)域:

  • 當前區(qū)域較小(80×80像素),可以適當擴大

添加更多顏色識別:

  • 如橙色、紫色等

優(yōu)化性能:

  • 當前雙重循環(huán)效率不高,可以使用NumPy進行向量化操作

七、完整代碼

import cv2

def get_color(img):
    H = []
    color_name = None
    img = cv2.resize(img,(640,400),)
    # 將彩色圖轉(zhuǎn)換為HSV
    HSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    # 畫矩形框
    cv2.rectangle(img,(280,180),(360,260),(0,255,0),2)
    # 依次取出每行每列的H,S,V值放入容器中
    for i in range(280,360):
        for j in range(180,260): H.append(HSV[j,i][0])
    # 分別計算出H,S,V的最大最小
    H_min = min(H);H_max = max(H)
    # 判斷顏色
    if H_min >= 0 and H_max <= 10 or H_min >= 156 and H_max <= 180: color_name='red'
    elif  H_min >= 26 and H_max <= 34 : color_name='yellow'
    elif  H_min >= 35 and H_max <= 77 : color_name='green'
    elif  H_min >= 100 and H_max <= 124 : color_name='blue'
    print(color_name)
    return  img,color_name

cap = cv2.VideoCapture(0)
while 1:
    _,frame=cap.read()
    img,cal = get_color(frame)
    cv2.imshow('',img)
    if cv2.waitKey(1) == 27:
        break

八、總結(jié)

本文介紹了一個基于OpenCV的實時顏色識別系統(tǒng),通過HSV色彩空間轉(zhuǎn)換和色調(diào)范圍判斷實現(xiàn)了基本顏色識別功能。該系統(tǒng)可以作為更復雜計算機視覺項目的基礎(chǔ),通過進一步優(yōu)化和擴展,能夠滿足各種實際應(yīng)用需求。

以上就是使用Python和OpenCV庫實現(xiàn)實時顏色識別系統(tǒng)的詳細內(nèi)容,更多關(guān)于Python OpenCV實時顏色識別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python爬蟲系列網(wǎng)絡(luò)請求案例詳解

    python爬蟲系列網(wǎng)絡(luò)請求案例詳解

    這篇文章主要介紹了【Python從零到壹】python爬蟲系列-網(wǎng)絡(luò)請求,從零開始學習Python網(wǎng)絡(luò)爬蟲,如何從中獲取需要的數(shù)據(jù)信息,現(xiàn)整理出零基礎(chǔ)如何學爬蟲技術(shù)以供學習
    2021-04-04
  • python將圖片透明背景轉(zhuǎn)為白色背景的兩種方法

    python將圖片透明背景轉(zhuǎn)為白色背景的兩種方法

    這篇文章主要為大家詳細介紹了python如何使用opencv2和PIL實現(xiàn)將圖片透明背景轉(zhuǎn)換成白色背景功能,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-05-05
  • Python實現(xiàn)多張圖片合成文字的效果

    Python實現(xiàn)多張圖片合成文字的效果

    前段時間看到有人問如何使用Python實現(xiàn)多張圖片組成文字的效果?覺得還挺有意思,于是嘗試做了一下,剛好趕上端午節(jié),所以打算從網(wǎng)上下載1000張王心凌的照片,組成端午安康的字樣,感興趣的可以了解一下
    2022-06-06
  • 詳解python常用命令行選項與環(huán)境變量

    詳解python常用命令行選項與環(huán)境變量

    這篇文章主要介紹了python常用命令行選項與環(huán)境變量,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Python可視化學習之seaborn繪制矩陣圖詳解

    Python可視化學習之seaborn繪制矩陣圖詳解

    矩陣圖即用一張圖繪制多個變量之間的關(guān)系,數(shù)據(jù)挖掘中常用于初期數(shù)據(jù)探索。本文介紹python中seaborn.pairplot和seaborn.PairGrid繪制矩陣圖,需要的可以參考一下
    2022-02-02
  • 詳細分析Python collections工具庫

    詳細分析Python collections工具庫

    這篇文章主要介紹了詳解Python collections工具庫的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • 關(guān)于keras中的Reshape用法

    關(guān)于keras中的Reshape用法

    這篇文章主要介紹了關(guān)于keras中的Reshape用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 對Python中GIL(全局解釋器鎖)的一點理解淺析

    對Python中GIL(全局解釋器鎖)的一點理解淺析

    首先需要明確的一點是GIL并不是Python的特性,它是在實現(xiàn)Python解析器(CPython)時所引入的一個概念,下面這篇文章主要給大家介紹了關(guān)于對Python中GIL的一點理解,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Python使用pathlib庫實現(xiàn)優(yōu)雅的處理路徑

    Python使用pathlib庫實現(xiàn)優(yōu)雅的處理路徑

    如果你需要在 Python 里進行文件處理,那么標準庫中的os和os.path兄弟倆一定是你無法避開的兩個模塊,本文主要來和大家聊聊如何使用pathlib庫實現(xiàn)優(yōu)雅的處理路徑,感興趣的可以了解下
    2023-12-12
  • django 開發(fā)忘記密碼通過郵箱找回功能示例

    django 開發(fā)忘記密碼通過郵箱找回功能示例

    這篇文章主要介紹了django 開發(fā)忘記密碼通過郵箱找回功能示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04

最新評論