1.匯入資料庫
import cv2
import numpy as np
from PIL import Image
2.匯入圖片
image_tif = Image.open('1.tif') #匯入tif影像
image_tif.convert('RGB').save('1p.png','PNG') # 轉換為png格式
image = cv2.imread('1p.png') #讀取png影像
3.轉化為灰度圖
# 將圖片轉換為灰度圖
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 應用高斯模糊,減少噪聲
blur = cv2.GaussianBlur(gray, (5, 5), 0)
4.二值化處理
# 二值化處理
ret, thresh = cv2.threshold(blur, 180, 255, cv2.THRESH_BINARY)
5.尋找目標物輪廓
# 尋找輪廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) #檢測所有輪廓,建立樹狀結構關係;儲存水平、垂直或對角線的端點
#contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) #檢測所有輪廓,但不建立層次關係;儲存輪廓上所有的點
# 遍歷輪廓
for cnt in contours:
# 計算輪廓的邊界框
x, y, w, h = cv2.boundingRect(cnt)
# 計算輪廓的面積
area = cv2.contourArea(cnt)
# 根據需要的條件過濾輪廓(例如,面積大小)
if area > 10000 and area < 20000: # 根據面積篩選目標物
# 繪製輪廓的邊界框
cv2.rectangle(thresh, (x, y), (x+w, y+h), (0, 0, 255), 2)
# 列印尺寸
print(f"Object width: {w}, Object height: {h}")
# 顯示圖片
cv2.imshow('Detected Objects', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
6.結果展示
結果展示: Object width: 111, Object height: 140
完整程式碼
import cv2
import numpy as np
from PIL import Image
# 讀取圖片
#image = cv2.imread('1.tif')
image_tif = Image.open('1.tif') #匯入tif影像
image_tif.convert('RGB').save('1p.png','PNG') # 轉換為png格式
image = cv2.imread('1p.png') #讀取png影像
# 將圖片轉換為灰度圖
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 應用高斯模糊,減少噪聲
blur = cv2.GaussianBlur(gray, (5, 5), 0)
# 二值化處理
ret, thresh = cv2.threshold(blur, 180, 255, cv2.THRESH_BINARY)
# 尋找輪廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) #檢測所有輪廓,建立樹狀結構關係;儲存水平、垂直或對角線的端點
#contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) #檢測所有輪廓,但不建立層次關係;儲存輪廓上所有的點
# 遍歷輪廓
for cnt in contours:
# 計算輪廓的邊界框
x, y, w, h = cv2.boundingRect(cnt)
# 計算輪廓的面積
area = cv2.contourArea(cnt)
# 根據需要的條件過濾輪廓(例如,面積大小)
if area > 10000 and area < 20000: # 根據面積篩選目標物
# 繪製輪廓的邊界框
cv2.rectangle(thresh, (x, y), (x+w, y+h), (0, 0, 255), 2)
# 列印尺寸
print(f"Object width: {w}, Object height: {h}")
# 顯示圖片
cv2.imshow('Detected Objects', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()