简而言之,我想通过“形状上下文”匹配来比较不同的道路标记。
您可以在下面看到我的第一个问题:从 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)
当我将a(原始转弯箭头)
与b(提取的转弯箭头)进行比较时
,没有问题,但是当我将a与c(测试“形状匹配”算法的其他任何东西)进行比较时,
出现以下错误:
OpenCV 错误:gemmImpl 中的断言失败(类型 == CV_64FC2),文件 /Users/travis/build/skvark/opencv-python/opencv/modules/core/src/matmul.cpp,第 1218 行
回溯(最后一次调用):文件“/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 in function gemmImpl
该错误仅发生在“形状上下文”的生成距离函数而不是“Hausdorff”的生成距离函数中