-3

我正在尝试使用 Python 制作虹膜扫描仪并打开 CV。使用模板匹配功能时出现以下错误:

import cv2
import numpy as np

img1 = cv2.imread('canny.jpg');
img2 = cv2.imread('frame1.jpg');
edges=cv2.Canny(img2,100,100)
w,h=edges.shape[::-1]

res = cv2.matchTemplate(img1 , edges, cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where(res >= threshold)
print loc

以下是错误:

Traceback (most recent call last):
  File "E:/OpenCV Programs/threshold2img1.py", line 9, in <module>
    res = cv2.matchTemplate(img1 , edges, cv2.TM_CCOEFF_NORMED)
error: OpenCV(3.4.1) C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\imgproc\src\templmatch.cpp:1102: error: (-215) (depth == 0 || depth == 5) && type == _templ.type() && _img.dims() <= 2 in function cv::matchTemplate
4

1 回答 1

1

imread默认情况下将图像文件读取为 BGR 彩色图像。所以 img1 是 BGR 彩色图像,而边缘是灰度图像。

您不能在 BRG 彩色图像和灰度模板之间进行模板匹配。从数学上讲,这没有意义。

将颜色像素视为 3d 空间中的点。现在标量 5 与点 (3,4,1) 有多相似?

OpenCV 手册实际上对此非常清楚。他们甚至给出了用于计算结果的公式......

https://docs.opencv.org/2.4/modules/imgproc/doc/object_detection.html?highlight=matchtemplate#matchtemplate

在彩色图像的情况下,分子中的模板总和和分母中的每个总和在所有通道上完成,并且每个通道使用单独的平均值。即该函数可以获取一个颜色模板一个彩色图像。

于 2018-04-06T05:59:09.840 回答