如何在Python中處理大尺寸圖片以查找白色區(qū)域中的圓形區(qū)域?

如何在Python中處理大尺寸圖片以查找白色區(qū)域中的圓形區(qū)域?

使用pythonopencv高效查找大尺寸圖片白色區(qū)域中的圓形

本文介紹如何使用Python和OpenCV庫(kù),高效處理9000×7000像素的大尺寸圖片,準(zhǔn)確識(shí)別其中白色區(qū)域內(nèi)的圓形。 直接處理如此高分辨率的圖片效率低下,因此我們將采用圖像縮放、二值化和霍夫變換等技術(shù)優(yōu)化處理流程。

原始方法中使用霍夫變換檢測(cè)圓形,但結(jié)果包含大量冗余信息。為了提高準(zhǔn)確性,我們需要改進(jìn)算法,主要步驟如下:

  1. 圖像縮放: 使用cv2.resize函數(shù)縮小圖像尺寸,降低計(jì)算復(fù)雜度,同時(shí)保持足夠的細(xì)節(jié)用于圓形識(shí)別。
  2. 灰度轉(zhuǎn)換: 將彩色圖像轉(zhuǎn)換為灰度圖像,簡(jiǎn)化后續(xù)處理。
  3. 二值化: 使用cv2.threshold函數(shù)將灰度圖像二值化,將白色區(qū)域與其他區(qū)域清晰地區(qū)分開。 這里設(shè)置合適的閾值至關(guān)重要,可以根據(jù)圖片的實(shí)際情況調(diào)整。
  4. 霍夫圓變換: 使用cv2.HoughCircles函數(shù)進(jìn)行霍夫圓變換,檢測(cè)圖像中的圓形。 參數(shù)需要根據(jù)圖像特點(diǎn)進(jìn)行微調(diào),例如param1和param2控制邊緣檢測(cè)的敏感度和累加器閾值。
  5. 圓形篩選: 對(duì)檢測(cè)到的圓形進(jìn)行篩選,只保留位于白色區(qū)域內(nèi)的圓形。 通過(guò)檢查圓心周圍區(qū)域的像素平均灰度值是否高于設(shè)定的閾值來(lái)實(shí)現(xiàn)。

以下是一個(gè)改進(jìn)后的Python代碼示例:

import cv2 import numpy as np  image_path = r"C:Users17607Desktopsmls picturesPic_20231122151507973.bmp"  # 請(qǐng)?zhí)鎿Q為你的圖片路徑  def detect_circles(image_path):     # 讀取圖像     img = cv2.imread(image_path)     # 縮放圖像 (調(diào)整縮放比例根據(jù)實(shí)際情況修改)     img = cv2.resize(img, (img.shape[1] // 10, img.shape[0] // 10))     # 轉(zhuǎn)換為灰度圖像     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)     # 二值化處理 (調(diào)整閾值根據(jù)實(shí)際情況修改)     _, thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)     # 霍夫圓變換 (調(diào)整參數(shù)根據(jù)實(shí)際情況修改)     circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 40, param1=50, param2=30, minRadius=0, maxRadius=0)      if circles is not None:         circles = np.round(circles[0, :]).astype("int")         for (x, y, r) in circles:             # 篩選位于白色區(qū)域的圓形 (調(diào)整閾值根據(jù)實(shí)際情況修改)             if np.mean(thresh[y - r:y + r, x - r:x + r]) > 200:                 cv2.circle(img, (x, y), r, (0, 255, 0), 2)  # 畫出圓圈                 cv2.circle(img, (x, y), 2, (0, 0, 255), 3)  # 畫出圓心     return img  result_image = detect_circles(image_path) cv2.imshow("Detected Circles", result_image) cv2.waitKey(0) cv2.destroyAllwindows() 

此代碼首先縮放圖像以提高效率,然后進(jìn)行灰度轉(zhuǎn)換和二值化處理,再使用霍夫圓變換檢測(cè)圓形。最后,通過(guò)檢查圓形區(qū)域的平均灰度值來(lái)篩選出位于白色區(qū)域內(nèi)的圓形,并將其繪制在圖像上。 請(qǐng)根據(jù)實(shí)際圖像調(diào)整代碼中的閾值和霍夫變換參數(shù)以獲得最佳結(jié)果。 這比之前的版本更簡(jiǎn)潔高效,并提供了更清晰的注釋。

立即學(xué)習(xí)Python免費(fèi)學(xué)習(xí)筆記(深入)”;

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享