gpt4 book ai didi

opencv - OpenCV中(CountNonZero)和(Moment M00)和(ContourArea)有什么区别?

转载 作者:行者123 更新时间:2023-12-02 09:20:47 25 4
gpt4 key购买 nike

如果我有一个 3x3 二值图像,并且位置 (x,y) 中有一个轮廓:(0,0), (0,1), (1,0), (1,1)

我通过 findContours 方法获取轮廓。

我想得到这个轮廓的面积:

  • 计数非零:4
  • 轮廓面积:1
  • M00 时刻:1

正确答案是什么,它们之间有什么区别?

该轮廓是正方形,因此面积为 2*2 = 4

那么为什么 ContourArea 等于 1?

我正在使用 EmguCV,这是我的代码:

VectorOfVectorOfPoint cont = new VectorOfVectorOfPoint();

Image<Gray, byte> img = new Image<Gray, byte>(3,3);

img[0, 0] = new Gray(255);
img[0, 1] = new Gray(255);
img[1, 0] = new Gray(255);
img[1, 1] = new Gray(255);
CvInvoke.FindContours(img, cont, null, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);

Moments m = CvInvoke.Moments(cont[0], true);
Console.WriteLine(CvInvoke.ContourArea(cont[0]));

CvInvoke.Imshow("ss", img);
CvInvoke.WaitKey(0);

最佳答案

我不知道实现细节,但我怀疑“轮廓”是一个从对象周围的像素中心到像素中心的多边形。该多边形小于像素集,每条边向内移动半个像素距离。

这与按 1 像素测量的 2x2 像素 block 的面积一致。

如果您想测量面积,请不要使用等高线功能。使用连通分量分析(对象标记)并计算每个连通分量中的像素数。

<小时/>

OpenCV 并不适合精确量化,其中有很多东西对我来说没有意义。

关于opencv - OpenCV中(CountNonZero)和(Moment M00)和(ContourArea)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61291286/

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