我正在嘗試將塔與其背景隔離開來。為此,我定義了物件顏色的上限和下限 HSV 范圍,如下所示,但它僅將部分物件與其背景隔離,因為物件具有兩種不同顏色的陰影,即灰色和白色。有沒有可能的方法來隔離包含兩種不同陰影顏色的物件?
影像是
[![在此處輸入影像描述][1]][1]
我正在使用的代碼是:
img = cv2.imread(r'source_img.jpg')
low = np.array([0,0,40])
high = np.array([180,18,230])
hsv = cv2.cvtColor(img,cv2.COLOR_RGB2HSV)
mask = cv2.inRange(hsv,low,high)
masked_img = cv2.bitwise_and(hsv,hsv,mask=mask)
生成的輸出影像僅包含部分物件分離。我想隔離整個塔,不包括背景草、建筑物和天空。
如何僅隔離沒有任何背景的物件塔?
uj5u.com熱心網友回復:
HSV 顏色閾值 兩階段形態學操作
從 HSV 顏色閾值獲得的二進制影像,具有此下限/上限范圍
lower = np.array([0, 0, 44])
upper = np.array([82, 78, 227])
有不需要的輪廓,所以打開變形。根據影像,您可能需要調整內核大小或迭代次數。
結果
import numpy as np
import imutils
import cv2
# Load image, resize smaller, HSV color threshold
image = cv2.imread('1.jpeg')
image = imutils.resize(image, width=600)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([0, 0, 44])
upper = np.array([82, 78, 227])
mask = cv2.inRange(hsv, lower, upper)
# Remove small noise on mask with morph open
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7,7))
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=3)
smooth_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
opening = cv2.morphologyEx(opening, cv2.MORPH_OPEN, smooth_kernel, iterations=3)
result = cv2.bitwise_and(image, image, mask=opening)
# result[opening==0] = (255,255,255) # Optional for white background
cv2.imshow('result', result)
cv2.imshow('mask', mask)
cv2.imshow('opening', opening)
cv2.waitKey()
注意:下/上 HSV 范圍是通過使用 cv::inRange (OpenCV) 選擇正確的 HSV 上下邊界進行顏色檢測而獲得的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/472820.html
標籤:Python 图片 opencv 图像处理 计算机视觉
