最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?OpenCV實(shí)現(xiàn)簡單的顏色識別功能(對紅色和藍(lán)色識別并輸出)

 更新時間:2023年12月23日 09:03:45   作者:我太難啦555  
Python?OpenCV可以用來進(jìn)行顏色識別,可以通過讀取圖像的像素值,來判斷像素點(diǎn)的顏色,從而實(shí)現(xiàn)顏色識別,這篇文章主要給大家介紹了關(guān)于Python?OpenCV實(shí)現(xiàn)簡單的顏色識別功能(對紅色和藍(lán)色識別并輸出)的相關(guān)資料,需要的朋友可以參考下

攝像頭識別紅色和藍(lán)色并框選,當(dāng)該顏色為攝像頭屏幕上大多數(shù)顏色時打印出該顏色的名稱

1.調(diào)包

import cv2
import numpy as np
from matplotlib import pyplot as plt

2.初始設(shè)置 

lower_red = np.array([0, 50, 100])        #為紅色和藍(lán)色設(shè)置閾值用來為之后處理圖像準(zhǔn)備
upper_red = np.array([10, 255, 255])      #該閾值是在HSV顏色空間下
lower_blue = np.array([100,50,100])
upper_blue = np.array([124, 255, 255])

red = (0,0,225)                           #設(shè)置紅色和藍(lán)色在BGR顏色空間下的數(shù)值元組
blue = (225,0,0)

cv2.namedWindow('video', cv2.WINDOW_AUTOSIZE)#設(shè)置窗口'video',大小為自適應(yīng)模式
cv2.resizeWindow('video',640,480)            #為窗口設(shè)置寬度(640)和高度(480)

3.圖像處理,提取顏色

def img_process(img,lower,upper):
    """根據(jù)閾值處理圖像,提取閾值內(nèi)的顏色。返回處理后只留下指定顏色的圖像(其余為黑色)
        img:原圖像;lower:最低閾值;upper:最高閾值"""
    kernel = np.ones((35, 35), np.uint8)                #創(chuàng)建一個35x35卷積核,卷積核內(nèi)元素全為1
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)          #將BGR圖像轉(zhuǎn)化為HSV圖像,方便顏色提取
    Open = cv2.morphologyEx(hsv,cv2.MORPH_OPEN,kernel)  #用卷積核對圖像進(jìn)行形態(tài)學(xué)開運(yùn)算操作,去除噪聲
    mask = cv2.inRange(Open, lower, upper)              #開運(yùn)算得到的圖像用閾值進(jìn)行二值化處理(處理后的結(jié)果為在閾值內(nèi)的部分變?yōu)榘咨?,不在閾值?nèi)的部分為黑色)
    res = cv2.bitwise_and(img, img, mask = mask)        #二值化處理后的圖像與原圖進(jìn)行位與運(yùn)算(處理后在閾值內(nèi)的顏色變?yōu)樵伾辉陂撝祪?nèi)的部分仍為黑色)
    return res                                          #該函數(shù)的返回值為位與運(yùn)算之后的圖像,此圖像只保留了在閾值內(nèi)的圖像,其余部分為黑色

4.輪廓繪制

def cnts_draw(img,res,color):
    """在原圖像上繪出指定顏色的輪廓。無返回值
        img:原圖像;res:只剩某顏色的位與運(yùn)算后的圖像;color:輪廓的顏色"""
    canny = cv2.Canny(res,100,200)#Canny邊緣檢測算法,用來描繪圖像中物體的邊緣,(100,200為此函數(shù)的兩個閾值,該閾值越小輪廓的細(xì)節(jié)越豐富)
    contours, hierarchy=cv2.findContours(canny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)#尋找圖像輪廓的函數(shù),這里先用Canny算法得到只保留輪廓的圖像方便輪廓的找尋
    if len(contours) == 0:#傳遞到max函數(shù)中的輪廓不能為空
        cv2.imshow('video',img)
        return
    else:
        max_cnt = max(contours , key = cv2.contourArea)#找到輪廓中最大的一個
        cv2.drawContours(img, max_cnt,-1,color,2)#在原圖上繪制這個最大輪廓
        (x,y,w,h) = cv2.boundingRect(max_cnt)#找到這個最大輪廓的最大外接矩形,返回的(x,y)為這個矩形右下角的頂點(diǎn),w為寬度,h為高度
        cv2.rectangle(img,(x,y),(x+w,y+h),color,3)#在原圖上繪制這個矩形
        cv2.imshow('video', img)#展示原圖

5.顏色識別

def colorfind(img):
    """找到原圖像最多的顏色,當(dāng)該顏色為紅色或藍(lán)色時打印出來該顏色的名稱,無返回值
        img:原圖像"""
    kernel = np.ones((35, 35), np.uint8)
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    Open = cv2.morphologyEx(hsv,cv2.MORPH_OPEN,kernel)#以上為圖像處理
    hist = cv2.calcHist([Open],[0],None,[180],[0,180])#對Open圖像的H通道進(jìn)行直方圖統(tǒng)計
    hist_max = np.where(hist == np.max(hist))#找到直方圖hist中列方向最大的點(diǎn)hist_max
    if 0 < hist_max[0] < 10:#hist_max[0]為hist_max的行方向的值,即H的值,H在0~10為紅色
        print('red')        
    elif 100 < hist_max[0] < 124:#H在100~124為藍(lán)色
        print('blue')
    else :                       #H不在前兩者之間跳出函數(shù)
        return
#可以添加對H的判斷來識別更多的顏色

 下面是OpenCV中HSV空間顏色對照表

6.程序主體

if __name__ == "__main__":
    cap = cv2.VideoCapture(0)#打開攝像頭(0代表打開默認(rèn)攝像頭,若有兩個攝像頭可用1表示打開另一個攝像頭)
    while cap.isOpened():#判斷攝像頭是否正常打開
        flag, frame = cap.read()#讀取攝像頭返回兩個參數(shù),flag是布爾類型代表攝像頭是否正常讀取,frame是從攝像頭讀取的圖像
        if not flag:            #若無法讀取則跳出循環(huán)
            print("無法讀取攝像頭!")
            break
        else:
            if frame is not None: #判斷攝像頭有無畫面
                res_blue = img_process(frame,lower_blue,upper_blue)
                res_red = img_process(frame,lower_red,upper_red)
                cnts_draw(frame,res_blue,blue)
                cnts_draw(frame,res_red,red)
                colorfind(frame)
                key = cv2.waitKey(10)
                if key == 27:
                    break
            else:
                print("無畫面")
                break


    cap.release()#釋放資源,停止讀取攝像頭
    cv2.destroyAllWindows()#關(guān)閉所有窗口

完整源代碼

import cv2
import numpy as np
from matplotlib import pyplot as plt

lower_red = np.array([0, 50, 100])
upper_red = np.array([10, 255, 255])
lower_blue = np.array([100,50,100])
upper_blue = np.array([124, 255, 255])     #若繪制輪廓與自己期望的識別結(jié)果相差較大,可通過調(diào)整閾值來改變識別結(jié)果
red = (0,0,225)
blue = (225,0,0)


cv2.namedWindow('video', cv2.WINDOW_AUTOSIZE)
cv2.resizeWindow('video',640,480)

def img_process(img,lower,upper):
    """根據(jù)閾值處理圖像,提取閾值內(nèi)的顏色。返回處理后只留下指定顏色的圖像(其余為黑色)
        img:原圖像;lower:最低閾值;upper:最高閾值"""
    kernel = np.ones((35, 35), np.uint8)
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    Open = cv2.morphologyEx(hsv,cv2.MORPH_OPEN,kernel)
    mask = cv2.inRange(Open, lower, upper)
    res = cv2.bitwise_and(img, img, mask = mask)
    return res

def cnts_draw(img,res,color):
    """在原圖像上繪出指定顏色的輪廓。無返回值
        img:原圖像;res:只剩某顏色的位與運(yùn)算后的圖像;color:輪廓的顏色"""
    canny = cv2.Canny(res,100,200)
    contours, hierarchy=cv2.findContours(canny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    if len(contours) == 0:
        cv2.imshow('video',img)
        return
    else:
        max_cnt = max(contours , key = cv2.contourArea)
        cv2.drawContours(img, max_cnt,-1,color,2)
        (x,y,w,h) = cv2.boundingRect(max_cnt)
        cv2.rectangle(img,(x,y),(x+w,y+h),color,3)
        cv2.imshow('video', img)

        
def colorfind(img):
    """找到原圖像最多的顏色,當(dāng)該顏色為紅色或藍(lán)色時打印出來該顏色的名稱,無返回值
        img:原圖像"""
    kernel = np.ones((35, 35), np.uint8)
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    Open = cv2.morphologyEx(hsv,cv2.MORPH_OPEN,kernel)
    hist = cv2.calcHist([Open],[0],None,[180],[0,180])
    hist_max = np.where(hist == np.max(hist))
    if 0 < hist_max[0] < 10:
        print('red')
    elif 100 < hist_max[0] < 124:
        print('blue')
    else :
        return

if __name__ == "__main__":
    cap = cv2.VideoCapture(0)
    while cap.isOpened():
        flag, frame = cap.read()
        if not flag:
            print("無法讀取攝像頭!")
            break
        else:
            if frame is not None: 
                res_blue = img_process(frame,lower_blue,upper_blue)
                res_red = img_process(frame,lower_red,upper_red)
                cnts_draw(frame,res_blue,blue)
                cnts_draw(frame,res_red,red)
                colorfind(frame)
                key = cv2.waitKey(10)
                if key == 27:
                    break
            else:
                print("無畫面")
                break

    cap.release()
    cv2.destroyAllWindows()

下面是程序運(yùn)行的實(shí)例

總結(jié) 

到此這篇關(guān)于Python OpenCV實(shí)現(xiàn)簡單的顏色識別功能的文章就介紹到這了,更多相關(guān)Python OpenCV實(shí)現(xiàn)顏色識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python獲取當(dāng)前腳本文件夾(Script)的絕對路徑方法代碼

    Python獲取當(dāng)前腳本文件夾(Script)的絕對路徑方法代碼

    在本篇文章中小編給各位整理了關(guān)于Python獲取當(dāng)前腳本文件夾(Script)的絕對路徑實(shí)例代碼內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2019-08-08
  • Python中數(shù)字以及算數(shù)運(yùn)算符的相關(guān)使用

    Python中數(shù)字以及算數(shù)運(yùn)算符的相關(guān)使用

    這篇文章主要介紹了Python中數(shù)字以及算數(shù)運(yùn)算符的相關(guān)使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • 使用Python requests庫發(fā)送JSON數(shù)據(jù)的POST請求步驟

    使用Python requests庫發(fā)送JSON數(shù)據(jù)的POST請求步驟

    在Python這個強(qiáng)大的編程語言中,requests庫是一個廣泛使用且功能強(qiáng)大的HTTP請求庫,發(fā)送POST請求并附帶JSON數(shù)據(jù)是一個非常常見的需求,本文給大家介紹了如何用Python的requests庫發(fā)送JSON數(shù)據(jù)的POST請求,需要的朋友可以參考下
    2024-06-06
  • python 使用事件對象asyncio.Event來同步協(xié)程的操作

    python 使用事件對象asyncio.Event來同步協(xié)程的操作

    這篇文章主要介紹了python 使用事件對象asyncio.Event來同步協(xié)程的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Pyqt5 實(shí)現(xiàn)多線程文件搜索的案例

    Pyqt5 實(shí)現(xiàn)多線程文件搜索的案例

    這篇文章主要介紹了Pyqt5 實(shí)現(xiàn)多線程文件搜索的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python利用Selenium實(shí)現(xiàn)自動化分頁處理和信息提取

    Python利用Selenium實(shí)現(xiàn)自動化分頁處理和信息提取

    在 Web 自動化測試或數(shù)據(jù)抓取場景中,分頁處理是一個常見的需求,通過 Selenium,我們可以實(shí)現(xiàn)對多頁面內(nèi)容的自動遍歷,并從中提取所需的信息,本文將詳細(xì)介紹如何利用 Selenium 進(jìn)行自動化分頁處理和信息提取,需要的朋友可以參考下
    2025-06-06
  • 如何利用Python識別圖片中的文字

    如何利用Python識別圖片中的文字

    這篇文章主要給大家介紹了關(guān)于如何利用Python識別圖片中文字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 一文帶你深入理解python中pytest-repeat插件的工作原理

    一文帶你深入理解python中pytest-repeat插件的工作原理

    這篇文章主要和大家一起深入探討到底pytest_repeat插件的具體功能是如何實(shí)現(xiàn)的呢,相信具體了解了該插件,其他三方插件也可以很快了解它內(nèi)部運(yùn)行機(jī)制,所以本文詳細(xì)講解了python pytest-repeat插件的工作原理,需要的朋友可以參考下
    2023-09-09
  • 使用Python創(chuàng)建和定制SmartArt圖形的示例代碼

    使用Python創(chuàng)建和定制SmartArt圖形的示例代碼

    在制作專業(yè)的PowerPoint演示文稿時,SmartArt圖形是一種強(qiáng)大的可視化工具,能夠?qū)?fù)雜的信息、流程或?qū)哟谓Y(jié)構(gòu)以直觀的方式呈現(xiàn),本文將深入探討如何使用Python在PowerPoint演示文稿中 programmatically創(chuàng)建、定制和操作SmartArt圖形,需要的朋友可以參考下
    2026-04-04
  • Python如何將日志寫入到數(shù)據(jù)表中

    Python如何將日志寫入到數(shù)據(jù)表中

    這篇文章主要介紹了Python如何將日志寫入到數(shù)據(jù)表中的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-03-03

最新評論

六枝特区| 大埔县| 阿拉善盟| 会泽县| 青河县| 简阳市| 江陵县| 凉山| 桦甸市| 罗甸县| 连平县| 黄龙县| 中阳县| 依兰县| 锦屏县| 扬州市| 通辽市| 麟游县| 枣阳市| 左权县| 玛沁县| 通山县| 池州市| 朔州市| 安阳市| 高碑店市| 曲松县| 改则县| 富顺县| 蒲江县| 当阳市| 高雄县| 昌宁县| 陇南市| 铜川市| 海口市| 龙胜| 浦城县| 霸州市| 侯马市| 缙云县|