2016-11-05 5 views
1

배열에 두 개의 "등고선"모양이 있습니다. 하나의 연속은 내가 ​​그의 실제 크기를 알고있는 사각형이며, 다른 하나는 비례 측정을 수행하는 데 필요한 두더지입니다. 다음은 이미지의 예는 다음과 같습니다그림에서 불규칙한 모양의 실제 크기를 측정하십시오.

enter image description here

광장은 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); 

하지만 난 그나마 그 corret입니다 생각합니다.

+0

1) 카메라 축이 흰색 사각형과 수직이되도록해야합니다. 그렇지 않으면 왜곡이 생깁니다. 즉, 두더지가 카메라에서 흰색 사각형과 같은 거리에 있어야합니다. 2) 두더지의 면적, 둘레 또는 주축/부축을 알고 싶습니까? –

+0

@ MarkSetchell 나는 두더지의 둘레, 넓이 및 길이를 얻을 것이다. 사각형이 1x1cm임을 알면 실제 크기를 얻으려고 노력할 것입니다. 하지만 어떻게 계산하나요? – fdfey

답변

1

아마도 두더지가 원형 인 것으로 가정하면 cv::boundingRect()을 사용할 수 있습니다. 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 

참고 : 모든 변수 중 하나 플로트 또는 정확한 계산을 두 번 있는지 확인하십시오.

+0

결과는 "픽셀"로 표시됩니까? – fdfey

+0

이 경우 결과는 흰색 패치 'mm'과 동일한 치수로 나타납니다. – ZdaR