bwdist在C ++中的替代功能

时间:2014-05-23 22:32:12

标签: c++ matlab opencv euclidean-distance

我在C ++中实现了Matlab代码。在Matlab中,他们使用 bwdist 来计算欧氏距离。

我使用函数 distanceTransform 来获得与Matlab相同的结果,但结果却截然不同。

float tests[5][5] = {{0, 0, 0, 0,0},{0, 0, 0, 0,0},{0, 0, 1, 0,0},{0, 0, 0, 0,0},{0 , 0 , 0 , 0,0}};
    Mat test(5,5,CV_8UC1,&tests);
    Mat test_result = Mat::zeros(5,5,CV_32FC1);
    distanceTransform(test,test_result,CV_DIST_L1,3);

C ++结果如下。

test_result = [0, 0, 0, 0, 0; 0, 0, 0, 0, 0; 0, 0, 0, 0, 0; 0, 0, 0, 0, 0; 0, 0, 0, 0, 0]

在OpenCV中使用时全部为零。 而Matlab的结果是不同的。

  2.8284    2.2361    2.0000    2.2361    2.8284
  2.2361    1.4142    1.0000    1.4142    2.2361
  2.0000    1.0000         0    1.0000    2.0000
  2.2361    1.4142    1.0000    1.4142    2.2361
  2.8284    2.2361    2.0000    2.2361    2.8284

请告诉我一些在C ++ / OpenCv中获得相同结果的方法,就像在Matlab中一样。

1 个答案:

答案 0 :(得分:4)

我敢说这个功能有效。下次使用适当的数据输入矩阵。

uchar tests[5][5] = { //You create a 8UC1, so your data set type should match
    {1, 1, 1, 1, 1},
    {1, 1, 1, 1, 1},
    {1, 1, 0, 1, 1},
    {1, 1, 1, 1, 1},
    {1 ,1, 1, 1, 1}};
Mat test(5, 5, CV_8UC1, tests); //tests is already a pointer
Mat test_result;
distanceTransform(test, test_result, CV_DIST_L2, 3); //You want euclidian distance