1. 基于Python的顏色識別器

        共 2445字,需瀏覽 5分鐘

         ·

        2020-10-02 10:07

        點擊上方小白學(xué)視覺”,選擇加"星標"或“置頂

        重磅干貨,第一時間送達

        在這篇文章中,我們將展示如何使用Python構(gòu)建顏色識別器。此過程也稱為“顏色檢測”。我們將創(chuàng)建一個基本應(yīng)用程序,該應(yīng)用程序?qū)椭覀儥z測圖像中的顏色。該程序還將返回顏色的RGB值。構(gòu)建顏色識別器是Computer Vision中最基礎(chǔ)的項目。

        如果大家以前從未聽說過Computer Vision,那么這是了解它的最佳時間。大多數(shù)機器學(xué)習(xí)和人工智能領(lǐng)域都與計算機視覺緊密相關(guān)。隨著我們的發(fā)展和探索,看到外部世界對我們的發(fā)展具有重大影響。對于機器來說,情況也是如此,他們使用圖像看到外界,并且這些圖像被轉(zhuǎn)換為計算機可以理解的數(shù)據(jù)值。

        目錄

        ? 入門

        ?

        ? 定義圖片

        ? 顏色識別

        ? 應(yīng)用

        ? 結(jié)果

        入門

        我們將為此項目使用三個主要模塊。它們是NumPy,Pandas和OpenCv。OpenCv是一個高度優(yōu)化的庫,專注于實時應(yīng)用程序。

        OpenCV(開源計算機視覺庫)是一個開源計算機視覺和機器學(xué)習(xí)軟件庫。OpenCV的構(gòu)建旨在為計算機視覺應(yīng)用程序提供通用的基礎(chǔ)結(jié)構(gòu),并加速在商業(yè)產(chǎn)品中使用機器感知。

        資料來源:https?:?//opencv.org

        如前所述,我們將在此項目中使用三個模塊。要使用這些模塊,我們必須安裝必要的庫。使用pip安裝庫非常簡單。Pip是程序包管理工具。我們將使用命令行界面進行安裝。這是一次安裝所有3個庫的行:

        pip install numpy pandas opencv-python

        安裝完成后,我們必須將它們導(dǎo)入到我們的程序中。在大家喜歡的代碼編輯器中打開一個新文件。以下是有關(guān)如何導(dǎo)入已安裝庫的代碼:

        import numpy as np
        import pandas as pd
        import cv2

        OpenCv導(dǎo)入為cv2。對于其他庫,我們將它們“ as”導(dǎo)入,以便在程序中更輕松地調(diào)用它們。

        完善!現(xiàn)在,我們可以進行下一步,在此步驟中,我們將定義要用于測試顏色識別器應(yīng)用程序的圖像。

        定義圖片

        您可以選擇任何想要的圖像。我將圖像保存在與程序相同的文件夾中,這使查找和導(dǎo)入更加容易。

        img = cv2.imread("color_image.jpg")

        為了給您一些想法,這是我將用于此項目的圖像:

        大家準備好進行一些編程了嗎?讓我們繼續(xù)下一步。

        顏色識別

        我問大家一個好問題。小伙伴們知道機器就相當(dāng)于一張白紙嗎?我們認為是因為他們學(xué)到了教給他們的東西。

        教授色彩

        首先,我們必須教給他們什么是顏色。為此,我們需要包含顏色名稱和一些與這些顏色匹配的值的數(shù)據(jù)。由于大多數(shù)顏色都可以使用紅色,綠色和藍色定義。這就是為什么我們將RGB格式用作數(shù)據(jù)點的原因。我找到了一個準備就緒的csv文件,其中包含大約1000個顏色名稱和RGB值。下面是相關(guān)鏈接:

        https://github.com/codebrainz/color-names/blob/master/output/colors.csv

        我們將在程序中使用此csv文件。該文件的屏幕截圖可讓您有所了解:

        colors.csv

        讓我們使用read_csv方法將colors.csv文件導(dǎo)入到我們的程序中。由于我們下載的csv文件沒有列名,因此我將在程序中定義它們。此過程稱為數(shù)據(jù)處理。

        index=["color", "color_name", "hex", "R", "G", "B"]csv = pd.read_csv('colors.csv', names=index, header=None)


        全局變量

        在以下步驟中,我們將定義兩個函數(shù)。為了使應(yīng)用程序順利運行,我們需要一些全局變量。大家將了解全局變量在使用函數(shù)時是如何幫助大家的。

        clicked = False
        r = g = b = xpos = ypos = 0

        顏色識別功能

        當(dāng)我們雙擊圖像的某個區(qū)域時,將調(diào)用此函數(shù)。它將返回顏色名稱和該顏色的RGB值。這就是神奇的地方!

        def recognize_color(R,G,B):    minimum = 10000    for i in range(len(csv)):        d = abs(R- int(csv.loc[i,"R"])) + abs(G- int(csv.loc[i,"G"]))+ abs(B- int(csv.loc[i,"B"]))        if(d<=minimum):            minimum = d            cname = csv.loc[i,"color_name"]    return cname

        鼠標點擊功能

        此函數(shù)用于定義我們的雙擊過程。在創(chuàng)建應(yīng)用程序部分時,我們將需要它。

        def mouse_click(event, x, y, flags, param):    if event == cv2.EVENT_LBUTTONDBLCLK:        global b,g,r,xpos,ypos, clicked        clicked = True        xpos = x        ypos = y        b,g,r = img[y,x]        b = int(b)        g = int(g)        r = int(r)

        希望大家繼續(xù)和我在一起!看起來可能有些復(fù)雜,但是當(dāng)我們開始在編輯器中編寫它們時,大局就會顯現(xiàn)出來。我們盡量使事情變得簡單易懂。


        應(yīng)用

        很高興大家能完成此步驟。在這一步中,我們將使用OpenCV方法將圖像作為新窗口打開。在該窗口中,我們將使用我們先前定義的功能。該應(yīng)用程序非常簡單,當(dāng)我們雙擊圖像上的某個區(qū)域時,它將返回顏色名稱和顏色值。

        應(yīng)用窗口

        首先,讓我向大家展示如何使用OpenCV將圖像文件作為新窗口打開。

        cv2.namedWindow('Color Recognition App')

        其次,讓我們調(diào)用我們創(chuàng)建的鼠標單擊功能。這為我們的應(yīng)用程序提供了更多功能。

        cv2.setMouseCallback('Color Recognition App',mouse_click)

        應(yīng)用程序

        這是while循環(huán),用于啟動我們的應(yīng)用程序窗口。

        while(1):cv2.imshow("Color Recognition App",img)    if (clicked):           #cv2.rectangle(image, startpoint, endpoint, color, thickness)-1 fills entire rectangle         cv2.rectangle(img,(20,20), (750,60), (b,g,r), -1)#Creating text string to display( Color name and RGB values )        text = recognize_color(r,g,b) + ' R='+ str(r) +  ' G='+ str(g) +  ' B='+ str(b)                #cv2.putText(img,text,start,font(0-7),fontScale,color,thickness,lineType )        cv2.putText(img, text,(50,50),2,0.8,(255,255,255),2,cv2.LINE_AA)#For very light colours we will display text in black colour        if(r+g+b>=600):            cv2.putText(img, text,(50,50),2,0.8,(0,0,0),2,cv2.LINE_AA)                    clicked=False

        關(guān)閉申請

        如果您使用過OpenCV項目,則可能熟悉此步驟。我們必須定義如何結(jié)束和關(guān)閉應(yīng)用程序窗口。否則,它將因為我們使用while(1)啟動應(yīng)用程序永遠運行。添加以下行是您未來項目的一個好習(xí)慣。

        #Break the loop when user hits 'esc' key        if cv2.waitKey(20) & 0xFF ==27:        breakcv2.destroyAllWindows()

        交流群


        歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


        瀏覽 60
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 欧洲熟女性爱 | 禁止的爱迅雷种子BT下载 | 久久绿帽网 | 操逼基地| 欧美一区二区黄色 |