我知道这个问题已经被问过很多次了,但没有一个能解决下面的问题。我有两个都是 uint8 的 np 数组,但 opencv 似乎错误地认为一个是 32F。为什么会这样,如果我想将两个图像匹配为模板,我该如何在 python 中修复它。
Out[1]:
array([[ 0, 0, 0, ..., 0, 0, 0],
[ 0, 23, 196, ..., 254, 254, 254],
[ 0, 197, 254, ..., 254, 254, 254],
...,
[ 0, 254, 254, ..., 250, 249, 249],
[ 0, 254, 254, ..., 249, 249, 249],
[ 0, 254, 254, ..., 249, 248, 248]], dtype=uint8)
Out[2]:
array([[[213, 138, 69],
[212, 137, 68],
[212, 138, 66],
...,
[150, 71, 8],
[150, 71, 8],
[150, 71, 8]],
.....
[[ 27, 22, 12],
[ 27, 22, 12],
[ 28, 22, 12],
...,
[ 17, 11, 1],
[ 17, 11, 1],
[ 17, 11, 1]]], dtype=uint8)
当我尝试匹配模板时导致错误:
cv2.matchTemplate(img,template,method)
值得注意的是,我创建了两个 numpy 数组,如下所示: 第一个:
img = cv2.cvtColor(np.array(Image.open('new_screenshot.png')), cv2.COLOR_BGR2RGB)
第二个:
template = cv2.imread('pics/sn/3d.png',0)
是的,我知道,我可以使用 cv2.imread 加载两者,一切都会好起来的,但在我的情况下,这是不可能的,因为我的示例中需要 PIL(用于制作屏幕截图img = cv2.cvtColor(np.array(ImageGrab.grab()), cv2.COLOR_BGR2RGB)
),所以我需要从 PIL 转换为 Opencv,我需要让上面的例子工作。