为什么cv2.line不能在1通道numpy阵列片上绘制?

2024-04-20 11:41:15 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么cv2.line不能在1通道numpy阵列片上绘制?你知道吗

print('cv2.__version__', cv2.__version__)

# V1
print('-'*60)
a = np.zeros((20,20,4), np.uint8)
cv2.line(a[:,:,1], (4,4), (10,10), color=255, thickness=1)
print('a[:,:,1].shape', a[:,:,1].shape)
print('np.min(a), np.max(a)', np.min(a), np.max(a))

# V2
print('-' * 60)
b = np.zeros((20,20), np.uint8)
cv2.line(b, (4,4), (10,10), color=255, thickness=1)
print('b.shape', b.shape)
print('np.min(b), np.max(b)', np.min(b), np.max(b))

输出:

cv2.__version__ 4.1.0
------------------------------------------------------------
a[:,:,1].shape (20, 20)
np.min(a), np.max(a) 0 0
------------------------------------------------------------
b.shape (20, 20)
np.min(b), np.max(b) 0 255

似乎错误消息取决于opencv版本:

cv2.__version__ 3.4.3
------------------------------------------------------------
Traceback (most recent call last):
  File "test_me.py", line 11, in <module>
    cv2.line(a[:,:,1], (4,4), (10,10), color=255, thickness=1)
TypeError: Layout of the output array img is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)

Tags: numpyversionstepnplinezerosmincv2
1条回答
网友
1楼 · 发布于 2024-04-20 11:41:15

有趣的问题。考虑到错误:

Layout of the output array img is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)

我认为这可能是由于numpy中的视图/副本之间的差异造成的。read1read2

作为比较,以下情况不起作用:

x = a[:,:,1]
cv2.line(x, (4,4), (10,10), color=255, thickness=1)
a[:,:,1] = x

但以下情况确实如此:

x = np.copy(a[:,:,1])
cv2.line(x, (4,4), (10,10), color=255, thickness=1)
a[:,:,1] = x

相关问题 更多 >