我想從高爾夫球中提取徽標以進行進一步的影像處理。我已經嘗試過不同的方法。
- 我想使用影像的灰度值來定位它們的位置,然后將其剪切掉。由于許多不同的徽標和影像周圍的黑色邊框,這種方法很遺憾地失敗了。
- 作為我的下一個方法,我認為我首先洗掉黑色背景,然后從 1 開始重復該程序。但也沒有成功,因為左下角有一個暗影,這也被識別為灰度方法的“標志” . 在外側進一步覆寫邊界不是解決方案,因為否則邊界上的徽標也將被切掉或僅檢測到一半。
- 我使用了 Open CV 庫的邊緣檢測演算法 Canny。檢測看起來很有希望,但我無法從檢測中僅提取徽標,因為 Golfball 的邊緣也被識別。
歡迎任何解決方案。請原諒我的英語。另外,我是編程的初學者。可能有一個非常簡單的解決方案可以解決我的問題,但我提前感謝您的幫助。
這里有 2 個示例影像,首先是應從中提取徽標的影像型別,然后是提取后影像的外觀。
非常感謝。最好的問候

uj5u.com熱心網友回復:
這本質上是“自適應”閾值,除了這種方法不需要閾值。它適應照明,為您提供完美精細的灰度影像(或顏色,如果擴展到這樣做)。
- 中值模糊(大內核大小)來估計球/照明
- 正常化的劃分
照明:

標準化(并稍微縮放):

用大津閾值:

def process(im, r=80):
med = cv.medianBlur(im, 2*r 1)
with np.errstate(divide='ignore', invalid='ignore'):
normalized = np.where(med <= 1, 1, im.astype(np.float32) / med.astype(np.float32))
return (normalized, med)
normalized, med = process(ball1, 80)
# imshow(med)
# imshow(normalized * 0.8)
ret, thresh = cv.threshold((normalized.clip(0,1) * 255).astype('u1'), 0, 255, cv.THRESH_BINARY cv.THRESH_OTSU)
# imshow(thresh)



uj5u.com熱心網友回復:
自適應閾值可以解決問題。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/505703.html
