通过计算两种不同形状的距离来

时间:2017-10-18 10:47:17

标签: python python-2.7 python-3.x opencv shape-context

简而言之,我想通过"形状背景"来比较不同的道路标记。匹配。

我可以在Matching shapes of road marking from 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 (原始转弯箭头)时 enter image description here 使用 b (提取的转弯箭头)enter image description here没有问题,当我将 a c进行比较时 strong>(其他任何测试"形状匹配"算法)enter image description here出现以下错误:

  

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)在函数gemmImpl中键入== CV_64FC2

错误仅发生在生成距离"形状上下文"并且没有产生" Hausdorff"

的距离的功能

1 个答案:

答案 0 :(得分:1)

好的,我认为问题是, a b a c 不会具有相同的像素高度( a :131 x 32px, b / c :29 x 18 px)。当我将 b c 图像的大小更改为更高的分辨率(如131 x 81 px)时,错误消失并且正在计算“形状上下文”的距离。