2017-07-17 112 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 255,255,255的工作,而我需要它爲更廣泛的RGB的工作。

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

Actuly我在寫問題的時候找到了自己問題的答案。我只是改變了第二個代碼。

這一行:

 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