Ошибка контекста формы путем вычисления расстояния двух разных форм
Вкратце, я хочу сравнить различные дорожные разметки путем сопоставления "контекст формы".
Мой первый вопрос вы можете увидеть под: Соответствие форм дорожной разметки из OpenData
Я решил свою первую проблему, но теперь появляется новая ошибка. Вот мой код:
import cv2
import numpy as np
# read data
datapath = "/Users/output/test/";
a = cv2.imread(datapath+"template_orig.png");
b = cv2.imread(datapath+"template.png");
imgray_a = cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)
ret_a,thresh_a = cv2.threshold(imgray_a,127,255,0)
imgray_b = cv2.cvtColor(b,cv2.COLOR_BGR2GRAY)
ret_b,thresh_b = cv2.threshold(imgray_b,127,255,0)
# find contours
_, ca, _ = cv2.findContours(thresh_a, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
_, cb, _ = cv2.findContours(thresh_b, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
print(np.shape(ca[0]), np.shape(cb[0]))
# generate distance --> Hausdorff OR ShapeContext
hd = cv2.createHausdorffDistanceExtractor()
sd = cv2.createShapeContextDistanceExtractor()
d1 = hd.computeDistance(ca[0],cb[0])
d2 = sd.computeDistance(ca[0],cb[0])
print(d1, " ", d2)
Когда я сравниваю (оригинальная стрелка поворота) с b (извлеченная стрелка поворота) нет никаких проблем, но когда я сравниваю a с c (что-нибудь еще, чтобы проверить алгоритм "соответствия формы") появляется следующая ошибка:
Ошибка OpenCV: сбой утверждения (тип == CV_64FC2) в gemmImpl, файл /Users/travis/build/skvark/opencv-python/opencv/modules/core/src/matmul.cpp, строка 1218
Traceback (последний вызов был последним): файл "/test_shape.py", строка 74, в d2 = sd.computeDistance (ca [0], cb [0])
cv2.error: /Users/travis/build/skvark/opencv-python/opencv/modules/core/src/matmul.cpp:1218: ошибка: (-215) type == CV_64FC2 в функции gemmImpl
Ошибка возникает только с функцией генерации расстояния "контекста формы", а не с функцией генерации расстояния "Хаусдорфа"
1 ответ
Хорошо, я думаю, что проблема была в том, что a и b или a и c не имеют одинаковую высоту пикселей (a: 131 x 32px, b / c: 29 x 18 px). Когда я изменяю размер изображения b или c на более высокое разрешение, такое как 131 x 81 px, ошибка исчезает, и вычисляется расстояние "контекста формы".