亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

OpenCV實(shí)現(xiàn)實(shí)時(shí)顏色檢測(cè)的示例

 更新時(shí)間:2025年06月15日 08:43:29   作者:E-An居士  
本文主要介紹了OpenCV實(shí)現(xiàn)實(shí)時(shí)顏色檢測(cè)的示例,通過HSV色彩空間轉(zhuǎn)換和色調(diào)范圍判斷實(shí)現(xiàn)紅黃綠藍(lán)顏色檢測(cè),包含視頻捕捉、區(qū)域標(biāo)記、顏色分析等功能,具有一定的參考價(jià)值,感興趣的可以了解一下

一、引言

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

二、系統(tǒng)概述

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

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

三、代碼解析

1. 導(dǎo)入庫

import cv2

我們只需要導(dǎo)入OpenCV庫,它提供了強(qiáng)大的計(jì)算機(jī)視覺功能,包括圖像處理和視頻捕捉。

2. 顏色識(shí)別函數(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])
    # 分別計(jì)算出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ù)功能詳解

  • 圖像預(yù)處理

    • 首先將輸入圖像調(diào)整為固定尺寸(640×400),確保處理一致性
  • 色彩空間轉(zhuǎn)換

    • 將BGR格式轉(zhuǎn)換為HSV格式,HSV色彩空間更適合顏色識(shí)別
    • H(色調(diào)):表示顏色類型
    • S(飽和度):表示顏色的純度
    • V(亮度):表示顏色的明暗程度
  • 檢測(cè)區(qū)域標(biāo)記

    • 在圖像上繪制一個(gè)綠色矩形框(280,180)到(360,260),標(biāo)識(shí)檢測(cè)區(qū)域
  • 數(shù)據(jù)采集

    • 遍歷檢測(cè)區(qū)域內(nèi)每個(gè)像素點(diǎn),收集所有H值
  • 顏色判斷

    • 計(jì)算區(qū)域內(nèi)H值的最小和最大值
    • 根據(jù)H值范圍判斷顏色:
      • 紅色:0-10或156-180
      • 黃色:26-34
      • 綠色:35-77
      • 藍(lán)色: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對(duì)象,參數(shù)0表示使用默認(rèn)攝像頭
  • 主循環(huán)

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

四、HSV色彩空間詳解

為什么選擇HSV而不是RGB進(jìn)行顏色識(shí)別?

  • RGB的局限性

    • RGB三個(gè)通道都與亮度相關(guān)
    • 對(duì)光照變化敏感
    • 顏色判斷需要同時(shí)考慮三個(gè)通道
  • HSV的優(yōu)勢(shì)

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

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

OpenCV中HSV的范圍:

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

常見顏色H值范圍:

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

可對(duì)比如下的顏色范圍圖

在這里插入圖片描述

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

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

    • 可以排除低飽和度(接近灰色)或低亮度(接近黑色)的區(qū)域
  • 使用均值而非極值

    • 當(dāng)前使用min/max容易受噪聲影響,可改為計(jì)算平均值
  • 擴(kuò)大檢測(cè)區(qū)域

    • 當(dāng)前區(qū)域較小(80×80像素),可以適當(dāng)擴(kuò)大
  • 添加更多顏色識(shí)別

    • 如橙色、紫色等
  • 優(yōu)化性能

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

七、完整代碼

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])
    # 分別計(jì)算出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é)

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

到此這篇關(guān)于OpenCV實(shí)現(xiàn)實(shí)時(shí)顏色檢測(cè)的示例的文章就介紹到這了,更多相關(guān)OpenCV 實(shí)時(shí)顏色檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)車票管理系統(tǒng)

    C語言實(shí)現(xiàn)車票管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)車票管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 詳解c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送

    詳解c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送

    這篇文章主要為大家詳細(xì)介紹了c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C++線程池實(shí)現(xiàn)

    C++線程池實(shí)現(xiàn)

    線程池是一種并發(fā)編程技術(shù),通過預(yù)先創(chuàng)建一組線程并復(fù)用它們來執(zhí)行多個(gè)任務(wù),避免了頻繁創(chuàng)建和銷毀線程的開銷,本文就來介紹一下C++線程池實(shí)現(xiàn),感興趣的可以了解一下
    2025-02-02
  • C語言break和continue的語句用法

    C語言break和continue的語句用法

    這篇文章主要介紹了C語言break和continue的語句用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • c語言詳解動(dòng)態(tài)內(nèi)存分配及常見錯(cuò)誤的解決

    c語言詳解動(dòng)態(tài)內(nèi)存分配及常見錯(cuò)誤的解決

    給數(shù)組分配多大的內(nèi)存空間?你是否和初學(xué)C時(shí)的我一樣,有過這樣的疑問。這一期就來聊一聊動(dòng)態(tài)內(nèi)存的分配,讀完這篇文章,你可能對(duì)內(nèi)存的分配有一個(gè)更好的理解
    2022-04-04
  • C語言實(shí)現(xiàn)電器銷售管理系統(tǒng)

    C語言實(shí)現(xiàn)電器銷售管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)電器銷售管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言 scanf輸入多個(gè)數(shù)字只能以逗號(hào)分隔的操作

    C語言 scanf輸入多個(gè)數(shù)字只能以逗號(hào)分隔的操作

    這篇文章主要介紹了C語言 scanf輸入多個(gè)數(shù)字只能以逗號(hào)分隔的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 基于Qt實(shí)現(xiàn)簡(jiǎn)易GIF播放器的示例代碼

    基于Qt實(shí)現(xiàn)簡(jiǎn)易GIF播放器的示例代碼

    這篇文章主要介紹了如何利用Qt設(shè)計(jì)一個(gè)簡(jiǎn)易GIF播放器,可以播放GIF動(dòng)畫。其基本功能有載入文件、播放、暫停、停止、快進(jìn)和快退,感興趣的可以了解一下
    2022-06-06
  • 利用Matlab繪制一款專屬進(jìn)度條

    利用Matlab繪制一款專屬進(jìn)度條

    MATLAB自帶的進(jìn)度條是很簡(jiǎn)單的,這樣的進(jìn)度條顯得冷冰冰的。因此,本文將用Matlab來DIY一款專屬的進(jìn)度條,感興趣的小伙伴可以了解一下
    2022-02-02
  • C語言版二值圖像統(tǒng)計(jì)連通區(qū)域

    C語言版二值圖像統(tǒng)計(jì)連通區(qū)域

    這篇文章主要為大家詳細(xì)介紹了C語言版二值圖像統(tǒng)計(jì)連通區(qū)域的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論