我目前正在研究一些图像的可视化,并发现 opencv 的 cv2.rectangle 的奇怪行为:
当输入图像是 np.ndarray 时,例如 arr,cv2.rectangle() 返回一个 np.ndarray,并且 arr 是用矩形绘制的。
当输入图像是 arr 的某种变体时,例如 arr[:, :, [2, 0, 1]],cv2.rectangle() 返回 cv2.UMat,并且不绘制矩形。
我当前的环境是:
以下是代码:
- 首先生成随机图像。
import numpy as np
import cv2
import copy
img = np.random.randint(0, 255, (100, 120, 3)).astype("uint8")
- 现在添加一个矩形
a = copy.deepcopy(img)
ret = cv2.rectangle(a, (0, 0), (10, 10), color=(255, 255, 255), thickness=2)
-
你会找到:
- ret 是一个 np.ndarray
- ret 的可视化和显示绘制了一个矩形
尝试另一种方式:
b = copy.deepcopy(img)
c = b[:, :, [2, 1, 0]]
ret = cv2.rectangle(c, (0, 0), (10, 10), color=(255, 255, 255), thickness=2)
-
你会找到:
- ret 是一个 cv2.UMat
- ret 或 c 的可视化显示没有绘制矩形
我真的很好奇我的代码有什么问题吗?还是背后隐藏着什么?