【问题标题】:Measure real size of irregular shapes in picture测量图片中不规则形状的实际尺寸
【发布时间】:2016-11-05 16:23:07
【问题描述】:

我在一个数组中有两个“轮廓”形状,一个轮廓是我知道他的实际大小的正方形,另一个是我需要进行比例测量的痣。 这是图像示例:

正方形有10x10mm,如何根据正方形知道其他形状的大小?

到目前为止我尝试的是这样的:

var molePerimeter = CvInvoke.ArcLength(contours[0], false);
double moleArea = CvInvoke.ContourArea(contours[0], false);
var squarePerimeter = CvInvoke.ArcLength(squares[0], true);
double squareArea = CvInvoke.ContourArea(squares[0], false);
textBox2.AppendText("Area: " + squareArea / moleArea);
textBox2.AppendText("perimeter: " + squarePerimeter / molePerimeter);

但我不认为这是正确的。

【问题讨论】:

  • 1) 您需要确保/假设相机轴垂直于白色方块,否则您会引入失真,即痣与相机的距离与白色方块的距离相同。 2)你想知道痣的面积、周长还是长轴/短轴?
  • @MarkSetchell 我会得到痣的周长、面积和长度。知道正方形是 1x1cm,我会尝试得到真正的尺寸。但是我如何计算呢?

标签: opencv math shape emgucv measurement


【解决方案1】:

假设痣可能是圆形的,您可以使用cv::boundingRect(),它会返回一个cv::Rect(),您可以使用它来获取痣的矩形尺寸。

类似地,您有白色补丁的矩形尺寸。假设痣的尺寸是(w1 x h1),而白斑的尺寸是(w2 x h2)。

现在计算mole w.r.t真实世界尺寸的尺寸:

real_w_patch, real_h_patch = 10, 10

real_w_mole = w1/w2 * real_w_patch
real_h_mole = h1/h2 * real_h_patch

注意:确保所有变量都是浮点数或双精度数以进行精确计算。

【讨论】:

  • 结果将以“像素”为单位?
  • 在这种情况下,结果与白色补丁 mm 的尺寸相同。
猜你喜欢
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 2023-03-09
  • 2017-09-09
  • 1970-01-01
  • 2013-01-29
相关资源
最近更新 更多