2017-07-17 22 views
0

cv2またはPILを使用してpythonで黒のピクセルをopencvで白に変更しようとしています。Python openCVで黒色を白くするが、黒色にしないPIL

オリジナル画像:ここで

enter image description here

は私のコードです:

import cv2 
import numpy as np 

frame = cv2.imread("numptest/captcha.png") 
cv2.imshow('frame',frame) 

lower_black = np.array([0,0,0]) 
upper_black = np.array([1,1,1]) 
black_mask = cv2.inRange(frame, lower_black, upper_black) 
cv2.imshow('mask0',black_mask) 
cv2.waitKey() 

結果は以下のようになります。私はそれを見たいと思いながら

enter image description here

このように:

enter image description here

私はまた、これらの四角形の中にあるものを保存しないこのコードを、試してみましたが、私は、それはRGBの広い範囲のために働く必要がある一方で、まさにRGB 255 255 255に対してのみ機能してきました。ここで

from PIL import Image 
import numpy as np 

im = Image.open('numptest/captcha.png') 
im = im.convert('RGBA') 
data = np.array(im) 
black_areas = (red == 0) & (blue == 0) & (green == 0) 
data[..., :-1][black_areas.T] = (255, 255, 255) 

im2 = Image.fromarray(data) 
im2.show()' 

は、第二のコードの結果である:

enter image description here

だから私は知らない、多分最高のは、これらのコードのいくつかの組み合わせになり、私は本当に第二のコードでINRANGEを使用する方法を理解いけませんおそらく私の問題を解決するだろう。

+0

グレースケール画像を作成し、以下のすべてを変更すると、10(ほぼ黒)〜255(白)となります。範囲内では、下限と上限を使用して有効な範囲にある色を定義してから、これをマスクとして使用し、その領域の色を白色にする必要があります。 [このチュートリアル](http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html)では、色でフィルタリングする方法を示しています。黒は必ずしも純粋ではないので、黒(10,10,10)と下限(黒)はちょうど黒(0,0,0)に近い。 – api55

答えて

1

Actauly私は質問を書いている間私の自身の質問に答えを見つけました。私はちょうど2番目のコードを変更しました。

この行:この行で

 black_areas = (red == 0) & (blue == 0) & (green == 0) 

black_areas = (red < 70) & (blue < 70) & (green < 70) 

これは結果である:それはとしてそれを使用しない理由はグレースケール画像である場合

enter image description here

+0

テキストが暗すぎないとうまくいく。 –

+0

ほとんどの場合、幸いなことにほとんどの場合、100%の精度は必要ありません。10%でも十分ですが、この問題の解決策はずっとあります。私はさらに最高の数を評価します、おそらく70は高すぎます、そして、これは全体のプロセスの最後のステップでもありません。 – user3281831

関連する問題