gpt4 book ai didi

c++ - 解释来自 OpenCV matchShapes() 的数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:26 70 4
gpt4 key购买 nike

我正在开发一个应用程序,我使用 OpenCV 的 matchShapes() 比较两个图像。 Image1 enter image description here

我在 Objective-C 代码中实现的方法如下

- (void) someMethod:(UIImage *)image :(UIImage *)temp {

RNG rng(12345);

cv::Mat src_base, hsv_base;
cv::Mat src_test1, hsv_test1;

src_base = [self cvMatWithImage:image];
src_test1 = [self cvMatWithImage:temp];

int thresh=150;
double ans=0, result=0;

Mat imageresult1, imageresult2;

cv::cvtColor(src_base, hsv_base, cv::COLOR_BGR2HSV);
cv::cvtColor(src_test1, hsv_test1, cv::COLOR_BGR2HSV);

std::vector<std::vector<cv::Point>>contours1, contours2;
std::vector<Vec4i>hierarchy1, hierarchy2;

Canny(hsv_base, imageresult1, thresh, thresh*2);
Canny(hsv_test1, imageresult2, thresh, thresh*2);

findContours(imageresult1,contours1,hierarchy1,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
for(int i=0;i<contours1.size();i++)
{
Scalar color=Scalar(rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255));
drawContours(imageresult1,contours1,i,color,1,8,hierarchy1,0,cv::Point());
}

findContours(imageresult2,contours2,hierarchy2,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
for(int i=0;i<contours2.size();i++)
{
Scalar color=Scalar(rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255));
drawContours(imageresult2,contours2,i,color,1,8,hierarchy2,0,cv::Point());
}

for(int i=0;i<contours1.size();i++)
{
ans = matchShapes(contours1[i],contours2[i],CV_CONTOURS_MATCH_I1,0);
std::cout<<ans<<" ";
getchar();
}

}

我得到了这些结果,但不知道这些数字的确切含义:0 0 0.81946 0.816337 0.622353 0.634221 0

最佳答案

this我认为博文应该更深入地了解 matchShapes 的工作原理。

你显然已经知道输入参数是什么,但对于任何发现它的人来说:

double matchShapes(InputArray contour1, InputArray contour2, int method, double parameter)

输出是一个指标,其中:

The lower the result, the better match it is. It is calculated based on the hu-moment values. Different measurement methods are explained in the docs.

提到的博文中的发现如下:( max = 1 , min = 0)

I got following results:

    Matching Image A with itself = 0.0
Matching Image A with Image B = 0.001946
Matching Image A with Image C = 0.326911

看,即使是图像旋转也不会对此比较产生太大影响。

这基本上表明您的结果:

  1. 前两个很棒,你在 0 时获得了完全匹配
  2. 后两个 (0.81946 0.816337) 是相当不相容的匹配
  3. 第三两个没问题,大约 62% 不兼容
  4. 最后一个为完全匹配。

如果我的计算机视觉知识教会了我,除非您 100% 使用相同的图像,否则总是对完全匹配持怀疑态度。

Edit1:我认为它也可能是旋转不变的,所以在你的情况下,你可能有三个非常相似的画线,它们以相同的方式(即水平)旋转并进行比较

关于c++ - 解释来自 OpenCV matchShapes() 的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39160445/

70 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com