百度統(tǒng)計網(wǎng)站速度診斷快速優(yōu)化官網(wǎng)
Python 顏色檢測項目
今天的項目將非常有趣和令人興奮。我們將與顏色打交道,并在項目過程中學(xué)習(xí)許多概念。顏色檢測對于識別物體來說是必要的,它也被用作各種圖像編輯和繪圖應(yīng)用的工具。
什么是顏色檢測?
顏色檢測是檢測任何顏色名稱的過程。這看起來很簡單,對吧?對于人類來說,這是一個極其簡單的任務(wù),但對于計算機(jī)來說,卻不是那么直接。人眼和大腦協(xié)同工作將光轉(zhuǎn)化為顏色。我們眼睛中的光感受器將信號傳輸給大腦,大腦再識別顏色。從小開始,我們就將某些光線與它們的顏色名稱聯(lián)系起來。我們將使用類似的方法來檢測顏色名稱。
關(guān)于 Python 顏色檢測項目
在這個顏色檢測 Python 項目中,我們將會構(gòu)建一個應(yīng)用程序,通過點擊顏色,你可以自動獲得顏色的名稱。為此,我們將有一個包含顏色名稱及其值的數(shù)據(jù)文件。然后,我們將計算與每種顏色的距離,并找到最短的距離。
數(shù)據(jù)集
顏色由3種主要顏色組成:紅、綠、藍(lán)。在計算機(jī)中,我們定義每種顏色的值在0到255的范圍內(nèi)。那么,我們有多少種方式可以定義顏色呢?答案是 256256256 = 16,581,375。大約有1650萬種不同的方式來表示顏色。在我們的數(shù)據(jù)集中,我們需要將每種顏色的值與它們相應(yīng)的名稱對應(yīng)起來。但不用擔(dān)心,我們不需要映射所有的值。我們將使用一個包含 RGB 值及其相應(yīng)名稱的數(shù)據(jù)集。CSV 文件來自以下鏈接:
- https://download.csdn.net/download/jrckkyy/90283529
colors.csv
文件包含 865 個顏色名稱以及它們的 RGB 和十六進(jìn)制值。
必備知識
在開始這個帶有源代碼的 Python 項目之前,你應(yīng)該熟悉 Python 的計算機(jī)視覺庫 OpenCV 和 Pandas。
OpenCV、Pandas 和 numpy 是這個 Python 項目中必需的 Python 包。要安裝它們,只需在終端中運(yùn)行這個 pip 命令:
pip install opencv-python numpy pandas
構(gòu)建 Python 顏色檢測項目的步驟
以下是構(gòu)建可以檢測顏色的 Python 應(yīng)用程序的步驟:
- 下載并解壓 zip 文件
- https://download.csdn.net/download/jrckkyy/90283529
項目文件夾包含3個文件:
Color_detection.py
– 項目的主要源代碼。Colorpic.jpg
– 用于實驗的樣本圖片。Colors.csv
– 包含我們數(shù)據(jù)集的文件。
- 從用戶那里獲取圖像
我們使用 argparse 庫創(chuàng)建一個參數(shù)解析器。我們可以直接從命令提示符中提供圖像路徑:
import argparse
ap = argparse.ArgumentParser()
ap.add_argument('-i', '--image', required=True, help="Image Path")
args = vars(ap.parse_args())
img_path = args['image']
# 使用 OpenCV 讀取圖像
img = cv2.imread(img_path)
- 用 pandas 讀取 CSV 文件
當(dāng)需要對數(shù)據(jù)文件如 CSV 進(jìn)行各種操作時,pandas 庫非常有用。pd.read_csv()
讀取 CSV 文件并將其加載到 pandas DataFrame 中。我們給每個列分配了一個名稱,以便于訪問。
# 使用 pandas 讀取 CSV 文件并命名每一列
index=["color","color_name","hex","R","G","B"]
csv = pd.read_csv('colors.csv', names=index, header=None)
- 在窗口上設(shè)置鼠標(biāo)回調(diào)事件
首先,我們創(chuàng)建一個窗口以顯示輸入的圖像。然后,當(dāng)鼠標(biāo)事件發(fā)生時,我們設(shè)置一個回調(diào)函數(shù),該函數(shù)將被調(diào)用。
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_function)
通過這些代碼行,我們將窗口命名為 ‘image’,并在鼠標(biāo)事件發(fā)生時調(diào)用 draw_function()
。
- 創(chuàng)建
draw_function
它會計算我們雙擊的像素的 RGB 值。函數(shù)參數(shù)包括事件名稱、鼠標(biāo)位置的 (x,y) 坐標(biāo)等。在函數(shù)中,我們檢查事件是否為雙擊,如果是,則計算并設(shè)置 r、g、b 值以及鼠標(biāo)的位置。
def draw_function(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDBLCLK:global b, g, r, xpos, ypos, clickedclicked = Truexpos = xypos = yb, g, r = img[y, x]b = int(b)g = int(g)r = int(r)
- 計算距離以獲取顏色名稱
我們有 r、g 和 b 的值?,F(xiàn)在,我們需要另一個函數(shù),該函數(shù)將從 RGB 值返回顏色名稱。為了獲得顏色名稱,我們計算一個距離(d),該距離告訴我們我們離顏色有多近,并選擇距離最短的那一個。
我們的距離由以下公式計算:
d = abs(Red – ithRedColor) + abs(Green – ithGreenColor) + abs(Blue – ithBlueColor)
def getColorName(R, G, B):minimum = 10000for 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 = dcname = csv.loc[i, "color_name"]return cname
- 在窗口上顯示圖像
每當(dāng)雙擊事件發(fā)生時,它將更新窗口上的顏色名稱和 RGB 值。
使用 cv2.imshow()
函數(shù),我們在窗口上繪制圖像。當(dāng)用戶雙擊窗口時,我們使用 cv2.rectangle
和 cv2.putText()
函數(shù)繪制一個矩形并獲取顏色名稱以在窗口上顯示文本。
while(1):cv2.imshow("image", img)if (clicked):# cv2.rectangle(image, startpoint, endpoint, color, thickness) -1 厚度填滿整個矩形cv2.rectangle(img, (20, 20), (750, 60), (b, g, r), -1)# 創(chuàng)建要顯示的文本字符串(顏色名稱和 RGB 值)text = getColorName(r, g, b) + ' R=' + str(r) + ' G=' + str(g) + ' B=' + str(b)# cv2.putText(img, text, start, font(0-7), fontScale, color, thickness, lineType, (可選的 bottomLeft bool) )cv2.putText(img, text, (50, 50), 2, 0.8, (255, 255, 255), 2, cv2.LINE_AA)# 對于非常淺的顏色,我們將在黑色背景下顯示文本if(r + g + b >= 600):cv2.putText(img, text, (50, 50), 2, 0.8, (0, 0, 0), 2, cv2.LINE_AA)clicked = False# 當(dāng)用戶按下 'esc' 鍵時中斷循環(huán)if cv2.waitKey(20) & 0xFF == 27:break
cv2.destroyAllWindows()
- 運(yùn)行 Python 文件
現(xiàn)在這個簡單的 Python 項目已經(jīng)完成,你可以從命令提示符中運(yùn)行 Python 文件。確保使用 ‘-i’ 參數(shù)提供圖像路徑。如果圖像位于另一個目錄中,則需要提供圖像的完整路徑:
python color_detection.py -i <在這里添加你的圖像路徑>
輸出
雙擊窗口以知道像素的顏色名稱
總結(jié)
在這個帶有源代碼的 Python 項目中,我們學(xué)習(xí)了顏色以及如何提取像素的 RGB 值和顏色名稱。我們學(xué)習(xí)了如何處理雙擊窗口等事件,并看到了如何使用 pandas 讀取 CSV 文件并執(zhí)行數(shù)據(jù)操作。這在許多圖像編輯和繪圖應(yīng)用中都有所使用。
參考文獻(xiàn)
名稱 | 鏈接 |
---|---|
DataFlair Python Projects | https://data-flair.training/blogs/python-projects/ |
Python Color Detection Project | https://data-flair.training/blogs/python-color-detection-project/ |
OpenCV Documentation | https://docs.opencv.org/4.5.1/ |
Pandas Documentation | https://pandas.pydata.org/pandas-docs/stable/ |
Python for Image Processing | https://realpython.com/python-opencv-color-spaces/ |
What is Color Detection? | https://www.geeksforgeeks.org/color-detection-python-opencv/ |
How to use argparse in Python | https://docs.python.org/3/howto/argparse.html |
A Simple Guide to Pandas | https://towardsdatascience.com/a-simple-guide-to-pandas-2ae0753f5218 |
Python Colors Dataset | https://github.com/codeifitech/colordetect/blob/master/colors.csv |
Color Space Conversion | https://www.tutorialspoint.com/opencv/opencv_color_spaces.htm |
OpenCV 教程 | https://www.bilibili.com/video/BV18x41147d6/ |
Python 顏色檢測 | https://zhuanlan.zhihu.com/p/35647438 |
了解色彩空間 | https://www.runoob.com/python3/python3-tutorial.html |
顏色檢測實戰(zhàn) | http://blog.csdn.net/qq_33066040/article/details/78800004 |
Python 計算機(jī)視覺入門 | https://morvanzhou.github.io/tutorials/machine-learning/opencv/ |
用 OpenCV 構(gòu)建顏色檢測器 | https://medium.com/@billy.r---------/building-a-color-detector-with-opencv-3baf62e6fac9 |