测量图片中不规则形状的实际尺寸
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 以进行精确计算。
我在数组中有两个"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 以进行精确计算。