OpenCVを使用して画像の二値化を行う前に影を取り除きたい。私は大津法と適応型閾値処理を試みましたが、影の領域が広い画像の場合、これらの2つの方法では良い結果が得られません。OpenCVを使ってスキャンした画像から影を取り除くには?
もっと良い解決法はありますか?前もって感謝します。
] 1
] 2
OpenCVを使用して画像の二値化を行う前に影を取り除きたい。私は大津法と適応型閾値処理を試みましたが、影の領域が広い画像の場合、これらの2つの方法では良い結果が得られません。OpenCVを使ってスキャンした画像から影を取り除くには?
もっと良い解決法はありますか?前もって感謝します。
] 1
] 2
あなたは言語を指定していないので、私はPythonが説明するためにOKであると仮定します。
私がthis answerに示すアプローチを採用して、複数のチャンネルで動作するように展開している可能性があります。
を正規化結果:次のように
import cv2
import numpy as np
img = cv2.imread('shadows.png', -1)
rgb_planes = cv2.split(img)
result_planes = []
result_norm_planes = []
for plane in rgb_planes:
dilated_img = cv2.dilate(plane, np.ones((7,7), np.uint8))
bg_img = cv2.medianBlur(dilated_img, 21)
diff_img = 255 - cv2.absdiff(plane, bg_img)
norm_img = cv2.normalize(diff_img, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
result_planes.append(diff_img)
result_norm_planes.append(norm_img)
result = cv2.merge(result_planes)
result_norm = cv2.merge(result_norm_planes)
cv2.imwrite('shadows_out.png', result)
cv2.imwrite('shadows_out_norm.png', result_norm)
非正規化された結果の線に沿って
何かが見え
通常の広告このような問題を助けることができるのは、適切な閾値処理です。
例: http://hanzratech.in/2015/01/21/adaptive-thresholding.html