我正在尝试使用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
答案 0 :(得分:1)
imread
默认将图像文件读取为BGR彩色图像。所以img1是BGR彩色图像,而边缘是灰度。
您无法在BRG彩色图像和灰度模板之间进行模板匹配。数学上没有意义。
将颜色像素视为3d空间中的点。现在标量5与点(3,4,1)有多相似?
OpenCV手册实际上非常清楚。他们甚至给出用于计算结果的公式......
在彩色图像的情况下,分子和中的模板求和 分母中的每个总和都在所有通道上完成 每个通道使用单独的平均值。就是这个功能 可以采用颜色模板和 颜色图片。