测量图片中不规则形状的实际尺寸

Measure real size of irregular shapes in picture

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

这个正方形有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);

但我认为这不正确。

假设痣可能是圆形的,你可以用cv::boundingRect(),它会return你一个cv::Rect(),你可以用它来得到矩形的尺寸痣。

同样,你有白色补丁的矩形尺寸。假设痣的尺寸为 (w1 x h1),白色斑块的尺寸为 (w2 x h2)。

现在计算痣的尺寸 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

注意:确保所有变量都是 float 或 double 以进行精确计算。