1

我知道这个问题已经被问过很多次了,但没有一个能解决下面的问题。我有两个都是 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,我需要让上面的例子工作。

4

0 回答 0