2016-11-03 3 views
2

개체 (상자)가 어떤 방향이나 어떤 자세로 움직이는 비디오 스트림이 있습니다. 나는 각각의 모든 물건을 추적하고 싶다.회전 된 객체의 경계 상자 그리기

1) 나는

2) 오브젝트 주위에 경계 상자를 그린 물체의 윤곽을 발견 : 그래서 내가 한 일이다.

3) 경계 상자의 중심을 계산하고 개체를 추적합니다.

이 모든 것이 정상적으로 작동합니다. 그러나 경계 박스의 중심은 물체가 회전하거나 다른 포즈에있을 때 물체의 중심과 정확히 같지 않습니다.

경계 상자를 회전하여 상자 모양에 맞추기를 원합니다. 이 때 경계 박스의 중심은 객체의 중심과 같습니다. 이렇게하면 추적 정확도가 향상됩니다.

이 사진이 첨부 참조 : 경계로 상자는 해결책이 아니다

경우, 내 객체는 항상 모양의 상자와도 단지 상면됩니다

객체의 중심을 찾을 수있는이 방법이있다 오브젝트가 비디오 스트림에 표시됩니다. OpenCV의 문서 here에서

enter image description here

+2

* (AABB)이고 원하는 것은 * Oriented Bounding Box * (OBB)입니다. 이 키워드를 사용하면 필요한 모든 것을 찾을 수 있습니다. – UnholySheep

답변

1

: 당신은 당신의 윤곽을 일단

// contours : is your blobs found before 
// Create a vector to store your rotated rectangles 
vector<RotatedRect> minRect(contours.size()); 

// in a for loop find rotated rectangles for each blob 
for(int i = 0; i < contours.size(); i++) 
{ 
    // minAreaRect() function is for finding Rotated Rectangles 
    minRect[i] = minAreaRect(Mat(contours[i])); 
} 
1

당신은 moments 기능을 사용할 수 있습니다. 이것은 경계 상자를 사용하지 않고 직접 중심을 부여합니다. C 슈퍼 경험

cv::Moments mu = moments(box_contour, false); 
cv::Point2f centroid = Point2f(mu.m10/mu.m00 , mu.m01/mu.m00); 

더 자세한 예를 here

하지 ++ (보통 파이썬에서 OpenCV의 사용)하지만 :)처럼 보일 것이다 당신이 가진 것은 * 축 정렬 된 경계 상자입니다

관련 문제