Ошибка при сопоставлении с шаблоном

Я пытаюсь сделать сканер радужной оболочки глаза на Python и открыть резюме. При использовании функции сопоставления шаблонов я получаю следующую ошибку:

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

настолько срочно, что у вас нет времени вводить сообщение об ошибке в веб-поиск, например в Google? решений масса ....

Piglet 06.04.2018 06:57

это потому, что вы используете изображения разной формы. острый край имеет форму (m, n), в то время как img1 имеет форму (m, n, 3)

flamelite 06.04.2018 06:59

Я не уверен, как вам вообще пришла в голову идея, что это может сработать, кстати. очень маловероятно, что вы получите какие-либо хорошие результаты, используя этот вид сопоставления шаблонов на хитрых изображениях глаз. вы вообще знаете, что делает эта функция?

Piglet 06.04.2018 10:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
3
328
1

Ответы 1

imread по умолчанию считывает файлы изображений как цветные изображения BGR. Итак, img1 - это цветное изображение BGR, а край - в оттенках серого.

Вы не можете выполнить сопоставление шаблонов между цветным изображением BRG и шаблоном в оттенках серого. Математически это не имеет смысла.

Думайте о цветных пикселях как о точках в трехмерном пространстве. Теперь насколько скаляр 5 похож на точку (3,4,1)?

Руководство OpenCV на самом деле довольно ясно об этом. Они даже приводят формулы, по которым вычисляются результаты ...

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

In case of a color image, template summation in the numerator and each sum in the denominator is done over all of the channels and separate mean values are used for each channel. That is, the function can take a color template and a color image.

Другие вопросы по теме