yamanekaito0702
@yamanekaito0702

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

本のスキャン画像の裏移りを少なくするプログラムを作成したい(OCR処理する際のみ

解決したいこと

スキャン書類をOCR処理する際に、本のスキャン画像の裏移りを少なくするプログラムを作成したいです。

mac,GoogleColab,pythonで実行しています。
輝度値をいじれるようにしたのですが、あまり思うような処理ができないようです。
何か、考え方の段階で間違っている気がするので、皆様の知識を分けていただけると助かります。

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

スキャン書類

page2.png

輝度値100で実行したもの

image_processed.png

該当するソースコード

from PIL import Image

# 画像を開く
img = Image.open("ファイルパス")

# 画像のピクセルデータを取得
pixels = img.load()

# 一定以下の薄さの閾値を設定(ここでは、輝度値が200以下の箇所を真っ白にする)
threshold = 100

# 画像の幅と高さを取得
width, height = img.size

# 画像の各ピクセルに対して、輝度値が閾値以下の場合は真っ白にする
for x in range(width):
for y in range(height):
pixel = pixels[x, y]
if len(pixel) == 3:
r, g, b = pixel
if (r + g + b) / 3 <= threshold:
pixels[x, y] = (255, 255, 255)
else:
r, g, b, a = pixel
if (r + g + b) / 3 <= threshold:
pixels[x, y] = (255, 255, 255, a)



# 画像を保存
img.save("出力ファイルバス")

自分で試したこと

輝度値をいじれるようにしたのですが、あまり思うような処理ができないようです。

1

3Answer

画像の各ピクセルに対して、輝度値が閾値以下の場合は真っ白にする

image.png
プログラム自体はソースコードのコメント通り黒の濃い部分を白にしています。

閾値以下のピクセルはそのまま、
閾値を超えるものを白にするのがおそらくやりたいことではと察します。

0Like

輝度は低いほど黒に近いので、想定と逆で黒の部分を白く飛ばしてしまっているようです。
インデントがついていないのでよくわからないのですが
if (r + g + b) / 3 <= threshold:の不等号を逆にしてthresholdをうまいこと調整すればいい感じになりそうです。

0Like

プログラムと全然関係ないですが、スキャンするときに裏に黒い紙をあてると裏写りしにくくなりますのでよければお試しください。

0Like

Your answer might help someone💌