首頁  >  文章  >  後端開發  >  如何使用Python對圖片進行形狀追蹤

如何使用Python對圖片進行形狀追蹤

PHPz
PHPz原創
2023-08-18 19:57:23991瀏覽

如何使用Python對圖片進行形狀追蹤

如何使用Python對圖片進行形狀追蹤

引言:
影像處理是電腦視覺領域的重要一環,而對影像中的特定形狀進行追蹤是其中常見的任務。本文將介紹如何使用Python與OpenCV庫來對圖片中的形狀進行追踪,並提供相應的程式碼範例。

一、準備工作:
在開始寫程式碼之前,我們需要安裝Python與OpenCV函式庫,並準備一張包含目標形狀的圖片作為輸入。首先,請確保您已經安裝了Python,可以在Python官方網站上下載並安裝適合您作業系統的版本。接下來,我們需要使用pip指令來安裝OpenCV函式庫。打開終端機(或命令列),輸入以下命令安裝OpenCV:

pip install opencv-python

二、導入庫與讀取圖像:
在正式編寫程式碼之前,我們首先需要導入對應的庫。 Python提供了import語句來導入需要使用的函式庫。在這個任務中,我們需要匯入cv2函式庫(這是OpenCV函式庫的Python介面)。此外,我們還需要匯入numpy庫以支援數組操作。以下是導入所需庫的程式碼:

import cv2
import numpy as np

下一步,我們需要讀取圖片,並轉換為灰階影像。灰階影像更易於處理,並且可以減少計算量。考慮到未來的工作可能會對原始影像進行修改,我們可以使用一個副本來保存灰階影像。以下是讀取影像並轉換為灰階影像的程式碼:

image = cv2.imread("input.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

三、形狀偵測與追蹤:
在進行形狀追蹤之前,我們需要先進行形狀偵測。 OpenCV提供了一個函數cv2.findContours()在影像中尋找輪廓。此函數接受一個二值化影像作為輸入,並傳回影像中所有輪廓的清單。以下是進行形狀偵測的程式碼範例:

ret, thresh = cv2.threshold(gray, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2. CHAIN_APPROX_SIMPLE)

接下來,我們可以使用cv2.approxPolyDP()函數來近似輪廓,使其更平滑。透過調節函數的第二個參數epsilon的值,可以改變近似程度。小的epsilon值將產生較精確的近似結果,而大的epsilon值將產生較粗糙的近似結果。以下是進行形狀近似的程式碼範例:

epsilon = 0.04 * cv2.arcLength(contour, True)
approx = cv2.approxPolyDP(contour, epsilon, True)

#最後,我們可以使用cv2.drawContours()函數將偵測到的形狀繪製到原始影像上。以下是繪製輪廓的程式碼範例:

cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)

程式碼解釋:
上述程式碼中,ret是一個布林值,用來指示閾值化操作是否成功。 thresh是閾值化影像,用於進行輪廓檢測。 contours是包含所有偵測到的輪廓的清單。 hierarchy是輪廓的層級資訊。 epsilon是用來近似輪廓的參數。 approx是近似後的輪廓。最後,cv2.drawContours()函數用於繪製輪廓。

四、展示與結果:
在完成形狀追蹤之後,我們可以將結果影像顯示出來,並儲存為新的檔案。以下是展示與儲存結果的程式碼範例:

cv2.imshow("Result", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2 .imwrite("output.jpg", image)

程式碼解釋:
上述程式碼中,cv2.imshow()函數用來展示結果圖片。 cv2.waitKey(0)用於等待使用者按下任意鍵後關閉影像視窗。 cv2.destroyAllWindows()函數用來關閉所有開啟的視窗。最後,cv2.imwrite()函數用於保存結果影像。

總結:
本文介紹如何使用Python與OpenCV函式庫實現圖片中形狀的追蹤。我們首先學習了準備工作,然後導入了所需的庫和讀取了圖像。接著,我們進行了形狀檢測與追踪,透過近似輪廓和繪製輪廓來實現追踪目標形狀。最後,我們展示了結果圖像,並保存了追蹤結果。

這裡有完整的程式碼範例:

import cv2
import numpy as np

image = cv2.imread("input.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for contour in contours:
    epsilon = 0.04 * cv2.arcLength(contour, True)
    approx = cv2.approxPolyDP(contour, epsilon, True)
    cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)

cv2.imshow("Result", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("output.jpg", image)

希望本文能幫助讀者了解如何使用Python與OpenCV函式庫來追蹤圖片中的形狀。透過學習並運用本文所提供的程式碼範例,讀者可以輕鬆地進行形狀追蹤任務,並在影像處理的應用中發揮作用。

以上是如何使用Python對圖片進行形狀追蹤的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn