Python OpenCV:为什么 fillPoly() 只绘制灰色多边形,而不管它的颜色参数如何?

Emi*_*oss 2 python drawing opencv colors

我正在尝试使用 Python 在 OpenCV 中的黑色二维 NumPy 数组(一个带有一个通道的图像)上编写一个白色蒙版:

mask = np.zeros(shape=(100, 100), dtype=np.int8)
cv2.fillPoly(mask, np.array([[[0,0], [89, 0], [99,50], [33,96], [0,47]]], dtype=np.int32), color=255)
print(mask)
Run Code Online (Sandbox Code Playgroud)

但是,当我打印蒙版时,多边形呈灰色:

[[127 127 127 ...   0   0   0]
 [127 127 127 ...   0   0   0]
 [127 127 127 ...   0   0   0]
 ...
 [  0   0   0 ...   0   0   0]
 [  0   0   0 ...   0   0   0]
 [  0   0   0 ...   0   0   0]]
Run Code Online (Sandbox Code Playgroud)

我尝试了一个 3D NumPy 数组color=(255,255,255),我尝试了不同的颜色,但都无济于事。为什么它忽略了这个color论点?

Han*_*rse 5

问题来自于您的初始化mask

mask = np.zeros(shape=(100, 100), dtype=np.int8)
Run Code Online (Sandbox Code Playgroud)

int8数据类型的取值范围是-128 ... 127,因此上面的任何值127都将被“截断”为127

用 试试你的代码color=100,你会得到预期的输出:

[[100 100 100 ...   0   0   0]
 [100 100 100 ...   0   0   0]
 [100 100 100 ...   0   0   0]
 ...
 [  0   0   0 ...   0   0   0]
 [  0   0   0 ...   0   0   0]
 [  0   0   0 ...   0   0   0]]
Run Code Online (Sandbox Code Playgroud)

我想,你想使用uint8而不是int8,所以也许这只是一个简单的错字!?

相应地更改您的代码

mask = np.zeros(shape=(100, 100), dtype=np.uint8)
Run Code Online (Sandbox Code Playgroud)

然后给出预期的结果,也为color=255

[[255 255 255 ...   0   0   0]
 [255 255 255 ...   0   0   0]
 [255 255 255 ...   0   0   0]
 ...
 [  0   0   0 ...   0   0   0]
 [  0   0   0 ...   0   0   0]
 [  0   0   0 ...   0   0   0]]
Run Code Online (Sandbox Code Playgroud)