問題是拍攝一張黑白影像,檢測黑色與白色邊界的所有地方,保持白色,并將所有其他白色像素變為黑色。我知道如何使用普通的 for 回圈和串列來做到這一點,但我想用我不太熟悉的 numpy 來做到這一點。這是我到目前為止所擁有的:
>>>from PIL Import Image
>>>import numpy as np
>>>a = Image.open('a.png')
>>>a = a.convert('L')
>>>a_np = np.array(a)
>>>a_np
array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]], dtype=uint8)
>>>mask = np.pad(a_np[1:-1,1:-1],1,mode='wrap') != 0
>>>mask
array([[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]])
>>> np.where(mask == True)
(array([ 98, 98, 98, ..., 981, 981, 981]), array([393, 394, 395, ..., 684, 685, 686]))
>>> a_np[mask] = 0
>>> a_np
array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]], dtype=uint8)
>>> np.where(a_np == 1)
(array([], dtype=int64), array([], dtype=int64))
基本上,嘗試創建一個掩碼來查找陣列中每個元素的鄰居,對于那些沒有黑色鄰居的人,將它們變成黑色 - 但無論我嘗試什么,我要么得到所有黑色元素,要么得到與我相同的陣列開始。歡迎使用 Numpy 或 OpenCV 解決方案。
前

后

uj5u.com熱心網友回復:
和
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/522432.html
上一篇:如何將父目錄指定為子模塊路徑
下一篇:為什么這個影像平均只生成垂直線?
