2017-07-17 118 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