我知道这个问题之前已被问过很多次,但是没有一个问题可以解决下面的问题。我有两个np数组都是uint8但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并且一切都会好的,但在我的情况下,这是不可能的,因为我的exmple中需要PIL(用于制作屏幕截图img = cv2.cvtColor(np.array(ImageGrab.grab()), cv2.COLOR_BGR2RGB)
)所以我需要从PIL到Opencv的转换,我需要让上面的例子起作用。