我刚开始使用 python3(或与此相关的任何语言)中的 opencv。我在 Windows 10 上。这是我的 pip 卡住:
numpy==1.16.0
opencv-python==4.0.0.21
Wand==0.5.0
我正在尝试将除(BGR 符号)[255,142,0] 之外的每个颜色像素更改为黑色。 这是我的测试代码
import cv2
import numpy as np
img=cv2.imread('referenceFont.png')
cv2.imshow('original',img)
img[np.where((img!=[255,142,0]).all(axis=2))]=[0,0,0]
cv2.imshow('remove other colors',img)
img[np.where((img==[255,255,255]).all(axis=2))]=[0,0,0]
cv2.imshow('explicit remove white',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
请注意,图像最初确实具有透明度,如果这很重要的话。我认为不加载透明度会有助于简化事情。 这是输出:
如您所见,仅尝试更改不匹配的颜色会导致图像几乎不可读,即使我明确删除白色,仍然存在“光晕效果”。我基本上喜欢原始图像,但背景是黑色的。感谢您的帮助。
更新 1
根据要求,这是原始文件。
最佳答案
建议在 HSV 颜色范围而不是 BGR 颜色范围内执行颜色分割操作。另外值得注意的是,您的输入图像具有抗锯齿颜色,这意味着它包含一些具有漫射白色和蓝色值的像素。为了处理这些类型的输入图像,我们可以使用 cv2.inRange()
方法来代替对给定颜色的单个 ==
操作。
import cv2
import numpy as np
img = cv2.imread("/path/to/img.png")
mask = cv2.inRange(img, np.array([200,100,0]), np.array([255, 170, 255]))
mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
final = cv2.min(img, mask)
要进一步改进结果,您可以使用 HSV 颜色范围而不是 BGR 颜色范围。
关于python - 为什么 python openCV 没有按照我期望的方式改变颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54433371/