【问题标题】:Shape Context Error by calculating distance of two different shapes通过计算两个不同形状的距离来计算形状上下文误差
【发布时间】:2018-03-30 05:21:08
【问题描述】:

简而言之,我想通过“形状上下文”匹配来比较不同的道路标记。

我的第一个问题可以在下面看到: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时(原转箭头) 使用 b(提取的转向箭头) 没有问题,但是当我将 ac 进行比较时(任何其他测试“形状匹配”算法)出现以下错误:

OpenCV 错误:gemmImpl 中的断言失败(类型 == CV_64FC2),文件 /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 in function gemmImpl

这个错误只出现在“形状上下文”的生成距离函数上,而不是“Hausdorff”的生成距离函数上

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 2021-01-30
      • 1970-01-01
      相关资源
      最近更新 更多