在影像上使用開放 CV 中的閾值函式來獲得二值影像,通過 Otsu 的閾值處理,我得到的影像由于部分影像的光照條件不同而具有白點
或者使用自適應閾值來修復照明條件,它無法準確表示 Otsu 實際可以表示的鉛筆填充氣泡。

如何在沒有補丁的情況下同時獲得填充的氣泡和固定的照明條件?這是原始影像

這是我的代碼
#binary image conversion
thresh2 = cv2.adaptiveThreshold(papergray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 21, 13)
thresh = cv2.threshold(papergray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
cv2.imshow("Binary", thresh) #Otsu's
cv2.imshow("Adpative",thresh2)
uj5u.com熱心網友回復:
另一種方法是應用形態閉合,這將洗掉所有繪圖,從而產生照明水平的估計。將影像除以照明水平可以得到經過照明校正的紙張影像:

在此影像中,我們可以輕松應用全域閾值:

我使用了以下代碼:
import diplib as dip
img = dip.ImageRead('tlCw6.jpg')(1)
corrected = img / dip.Closing(img, dip.SE(40, 'rectangular'))
out = dip.Threshold(corrected, method='triangle')[0]
uj5u.com熱心網友回復:
您的方法存在問題:
您嘗試過的方法:
- Otsu 閾值是根據整個影像中的所有像素值確定的(全域技術)。如果您查看影像的左下角,則會出現灰色陰影,這可能會對確定閾值產生不利影響。
- 自適應閾值:這是關于為什么它沒有幫助
鏈接:

