使用 Python 構建調色板

使用 Python 構建調色板

人類可以區分大約 1000 萬種顏色。要感知它們,您需要一種稱為調色板的東西。調色板包含顯示人眼可見的全部顏色的工具。在現實世界中,您可以使用它們在紙上創建美觀的設計,而在數字世界中,您可以使用它們為屏幕元素添加顏色。

最終,您的計算機使用特定格式對您在屏幕上看到的所有不同陰影進行編碼。借助 Python,借助 OpenCV 和 NumPy 模塊,您只需幾行代碼即可開發出 RGB 編碼的調色板。

OpenCV 和 NumPy 模塊

您可以使用 OpenCV 分析圖像和視頻。它是免費的、開源的、易於使用的,並且包含有用的庫。這些提供了在兩個和三個維度上對對象進行分類、定位和跟踪的技術。要在您的環境中安裝 OpenCV,請打開終端並運行:

pip install opencv-python

NumPy 模塊是另一個流行的庫,您會看到許多 Python 程序都在使用它。NumPy(數值 Python)是一個可用於數據分析和科學計算的模塊。它提供了 n 維數組對像以及有助於操作這些數組的數學運算。

要在您的環境中安裝 NumPy,請執行:

pip install numpy

通常,您將使用 OpenCV 使用邊緣檢測等技術來處理圖像。然後,您可以使用 NumPy 對處理後的圖像進行數據分析。使用此組合,您可以創建和解碼 QR 碼、對圖像進行分類、執行光學字符識別以及構建可以實時檢測運動和跟踪個人的視頻監控系統。

如何使用 Python 構建調色板

按照以下步驟在 Python 中使用 OpenCV 和 NumPy 模塊構建調色板。

首先導入 OpenCV 和 NumPy 模塊。定義一個名為emptyfunction()的函數,其中包含 pass 語句。pass 語句充當您將來可以編寫的代碼的佔位符。這對於像 createTrackbar 這樣的函數特別有用,您稍後會用到它。它需要一個有效的回調函數,您現在可以將 emptyFunction 作為佔位符傳遞。

import cv2
import numpy as np

def emptyFunction():
    pass

使用 NumPy 的zero()函數生成一個大小為 512 * 512 * 3、數據類型為 uint8 的三維數組。每個數組將包含 512 列和 512 行。uint8表示無符號整數,因此程序用零填充數組。

image = np.zeros((512, 512, 3), np.uint8)

設置程序將顯示的窗口的名稱並將其傳遞給namedWindow()函數以創建窗口:

windowName = "OpenCV Color Palette"
cv2.namedWindow(windowName)

接下來,為紅色、綠色和藍色分量生成三個軌跡條。您可以使用 OpenCV 的createTrackbar()函數執行此操作。首先,將標籤傳遞為紅色、藍色或綠色。其次,您需要傳遞要放置這些條形圖的窗口的名稱,例如 windowName。

第三個參數是軌跡條的最小限制,本例中為0。第四個參數指定最大值,對於 24 位顏色值是 255。第五個也是最後一個參數是一個回調函數,createTrackbar 需要一個有效的函數。這就是您之前創建 emptyFunction 以充當佔位符的原因。

cv2.createTrackbar('Blue', windowName, 0, 255, emptyFunction)
cv2.createTrackbar('Green', windowName, 0, 255, emptyFunction)
cv2.createTrackbar('Red', windowName, 0, 255, emptyFunction)

聲明一個無限 while 循環,並將窗口名稱與要顯示的圖像一起傳遞給 OpenCV 的imshow()函數。由於圖像包含一個由零組成的三維數組,程序最初顯示黑屏。

通過將waitkey()的值與 27(Escape 鍵的 ASCII 代碼)進行比較來檢查用戶是否按下了Escape 鍵。waitkey() 函數顯示窗口指定的毫秒數或直到您按下一個鍵。通過將一個作為輸入傳遞,它顯示窗口一毫秒,但由於無限 while 循環而重新生成。

要獲取軌跡欄的當前位置,請將軌跡欄的名稱與窗口的名稱一起傳遞給getTrackbarPos()。對三種不同的顏色分量(藍色、綠色和紅色)重複此步驟。使用切片運算符將三個值分配給圖像數組。這將根據軌跡欄的位置用當前值替換之前的一組值(最初全為零)。

while (True):
    cv2.imshow(windowName, image)

    if cv2.waitKey(1) == 27:
        break


    blue = cv2.getTrackbarPos('Blue', windowName)
    green = cv2.getTrackbarPos('Green', windowName)
    red = cv2.getTrackbarPos('Red', windowName)
    image[:] = [blue, green, red]
    print(blue, green, red)

用戶按下 Escape 鍵後,使用destroyAllWindows()關閉程序打開的窗口:

cv2.destroyAllWindows()

最後,將它們放在一起並運行它來控制和查看您的調色板。

Python 調色板程序的輸出

運行上面的程序時,會出現一個窗口,其中包含藍色、綠色和紅色的三個軌跡欄。軌跡條在 0 到 255 的範圍內移動。當您改變不同條的值時,您應該會在下面的部分中看到不同的顏色深淺。

在第一個示例中,您可以看到藍色條設置為 0,綠色條設置為 69,紅色條設置為 255。生成的輸出顏色為橙色/紅色陰影。此外,終端窗口將顏色值顯示為 0 69 255。

橙紅色調色板

同樣,當您將藍色條設置為 130、將綠色設置為 0、將紅色設置為 75 時,您將獲得靛藍色。

靛藍調色板

OpenCV的各種應用

OpenCV 為圖像處理、對象識別、人臉識別和跟踪等任務提供了有價值的功能。使用 OpenCV,您可以生成實時計算機視覺應用程序,這將在機器人技術、工業自動化、醫學成像和監控系統等領域大有裨益。

計算機視覺的未來充滿希望。您將能夠使用計算機視覺來幫助視障人士,促進農業的更好發展,使用自動駕駛汽車提高道路安全,甚至導航其他行星,例如火星。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *