Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python openCV PIL将黑色更改为白色,但不将白色更改为黑色_Python_Opencv - Fatal编程技术网

使用Python openCV PIL将黑色更改为白色,但不将白色更改为黑色

使用Python openCV PIL将黑色更改为白色,但不将白色更改为黑色,python,opencv,Python,Opencv,我正在尝试使用cv2或PIL在python中使用opencv将黑色像素更改为白色 原图: 这是我的密码: 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,

我正在尝试使用cv2或PIL在python中使用opencv将黑色像素更改为白色

原图:

这是我的密码:

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()
结果如下所示:

虽然我希望它看起来像这样:

我也尝试过这段代码,它确实保留了那些矩形中的内容,但只适用于RGB 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()'
下面是第二个代码的结果:


所以我不知道,也许最好是这些代码的组合,我只是不太明白如何在第二个代码中使用inRange,这可能会解决我的问题。

事实上,我在写问题时找到了我自己问题的答案。我刚刚修改了第二个代码

这一行:

       black_areas = (red == 0) & (blue == 0) & (green == 0)
    black_areas = (red < 70) & (blue < 70) & (green < 70)
这一行:

       black_areas = (red == 0) & (blue == 0) & (green == 0)
    black_areas = (red < 70) & (blue < 70) & (green < 70)
黑色区域=(红色<70)和(蓝色<70)以及(绿色<70)
结果是:


如果是灰度图像,为什么不将其用作灰度图像,并将下面的所有内容更改为10(几乎为黑色)到255(白色)。在范围内,您必须使用下限和上限定义哪些颜色在有效范围内,然后将其用作遮罩并将该区域涂成白色。在这本书中,我会用接近黑色(10,10,10)的上界和黑色(0,0,0)的下界,因为黑色并不总是纯的。幸运的是,在大多数情况下,它不是纯的,我不需要100%的准确度,即使10%对我来说也足够了,但我确信有更好的解决方案。我将进一步评估最佳数字,可能70太高,这也不是整个过程的最后一步。