15

スキャンした画像がありますが、白い紙が画面上で白くありません。背景を白くするために契約/明るさを均等にする方法はありますか?

アップデート

EmguCv から提案された Image._EqualizeHist 関数を試しました。

string file = @"IMG_20120512_055533.jpg";
Image<Bgr, byte> originalColour = new Image<Bgr, byte>(file);

Image<Bgr, byte> improved = originalColour.Clone();
improved._EqualizeHist();

しかし、さらに悪い結果が得られます (最初にグレースケールしたときも):

他のパラメーターがありませんか?

4

5 に答える 5

21

ここでいくつかのテクニックについて説明しました:CのOpenCVでコントラストを調整するにはどうすればよいですか?

これをチェックしてください。以下は、画像で最後の2つの方法を試したときに得られた結果です。

1)しきい値処理

しきい値処理により、バイナリイメージが得られます。それがあなたが望むものであるならば、あなたは適用することができますthreshold function

2)グレースケール画像が必要な場合

ここに画像の説明を入力してください

追加 :

Morphological closingあなたの場合にもうまくいく

img = cv2.imread('home.jpg',0)
kernel1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
close = cv2.morphologyEx(gray,cv2.MORPH_CLOSE,kernel1)
div = np.float32(gray)/(close)
res = np.uint8(cv2.normalize(div,div,0,255,cv2.NORM_MINMAX))

(Python APIのコード)

以下の結果:

ここに画像の説明を入力してください

于 2012-05-12T05:39:23.717 に答える
6

AdaptiveThresholdを使用することをお勧めします。画像内のすべてのピクセルに対してローカル近傍のしきい値処理を行うことで機能します (これは、画像よりも少し強いグラデーションの背景がある場合に非常に重要です)。blockSizeパラメータは近傍のサイズであり、処理されたピクセル値は平均近傍値から を引いた値よりも大きくなければなりませんparam1

ここに画像の説明を入力

これを Python で行う方法を次に示します (c に変換するのは非常に簡単なはずです)。

import cv
im = cv.LoadImage("9jU1Um.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
cv.AdaptiveThreshold(im, im, 255, cv.CV_ADAPTIVE_THRESH_MEAN_C, 
                                  cv.CV_THRESH_BINARY, blockSize=31, param1=15)
cv.ShowImage('image', im)
cv.WaitKey(0)
于 2012-05-12T10:11:10.703 に答える
4

これはequalizeHistと呼ばれます。emguでの名前はわかりませんが、結果はまさに必要なものになるはずです。つまり、背景が明るくなり、テキストが暗くなります。

編集

エッジのみを抽出するには(画像強調手法とは大きく異なります)、Cannyを適用するだけです。開始時に2つのしきい値を20と60として選択し、見栄えの良いエッジ画像が得られるまで、それらの間の比率を3:1に保ちながら増加(または減少)します。

于 2012-05-12T05:11:19.897 に答える
-1

いずれにせよ、各ピクセルをチェックすることもできます。定義値未満の場合は0に設定し、定義値を超える場合は255に設定します。

于 2012-05-13T02:50:19.293 に答える