어떤 함수 ❓ 🤔
"형상을 근사" 하는 함수입니다. 검출된 형상(외곽선)을 표현하기 위해, 점 데이터가 사용되어지는데요. 그 데이터 수를 수많은 어레이 점 데이터에서, 보다 적은 점으로 커브 또는 다각형 형상을 표현할 수 있게 됩니다.
조금 더 쉽게 풀어 얘기하면, 사각형 물체의 컨투어(외곽선)를 점 20개로 세밀하게 표현했다고 합시다. 하지만 우리는 사실 사각형(다각형)을 표현하기 위해 꼭지점 네 점만 있으면 되죠. 즉, 사각형(특정 형상)을 표현하기 위한 최소 데이터를 20에서 4개로 근사화 했다 ! 라고 하는 작업을 해주는 함수입니다.
(근사 정확도 설정에 따라서, 커브 또는 점 데이터 갯수는 변경될 수 있습니다.)
approxPolyDP(
컨투어 포인트 어레이,
근사된 포인트 어레이,
근사 정확도,
근사 커브의 개폐여부설정
)
매개변수 (설명)
☑️ 필요한 사전작업 : findContours() 함수
🔑 컨투어 포인트 어레이 : 컨투어를 구성하는 포인트 어레이의 어레이 입니다. 한 이미지 프레임에서 검출된 각각(복수)의 컨투어를 구성하는 점 데이터를 의미합니다. findContours()에서 반환되는 컨투어 어레이 값이 바로 이 값입니다. 변수의 타입은 다음과 같습니다. 어레이의 어레이.
vector<vector<Point>>
🔑 근사된 포인트 어레이 : 보다 적은 수로 근사된 포인트 어레이의 어레이입니다. 위에서 입력된 컨투어 포인트 어레이 사이즈와 같아야 하겠죠. 왜냐하면, 한 이미지 프레임에 3개의 물체가 검출 되면, 근사화되는 물체의 컨투어도 3개 이기 때문입니다. 각 컨투어를 표현하는 점 데이터 수는 줄어듭니다. 하지만 근사 작업을 하는 컨투어 대상의 수는 같아야 합니다. 간단하죠.
🔑 근사 정확도 : 근사 정확도를 정의합니다. double 타입 변수이며 작은 수 일수록 원래 컨투어 형상과 비슷한 방향으로 근사합니다(정확도 상승). 정확하게 근사한다는 것은 보다 많은 점 또는 커브를 사용하게 된다는 말과 일맥상통합니다. 예를 들어, 원 형상을 갖는 물체를 검출하는 경우, 그 형상을 표현하기 위해 5개 커브보다는 10개 커브를 가지는 다각형이 그 정확도가 높겠죠. 그런 의미로 사용되는 부분입니다.
(자세한 부분은 DEMO . 이후 확인 할 수 있습니다.)
🔑 근사 커브의 개폐여부설정 : fisrt Point, Last Point를 이어줄지 아닐지를 지정합니다. boolean 타입의 변수이며, True 이면, 커브는 닫힘 상태가 됩니다.
공홈 링크는 다음과 같습니다.
DEMO. ( Detail Code 🔗 )
...
for (int i = 0; i < contours.size(); i++)
{
...
approxPolyDP(contours[i], conPoly[i], 0.02 * peri, true);
if (conPoly[i].size() == 4)
{
drawContours(img, conPoly, i, Scalar(255, 0, 255), 20);
}
...
다음 그림은 근사 정확도에 따라 원 도형을 어떻게 근사하는지 보여줍니다. 먼저 그림 우측 하단에 있는 빨간 원 도형에 대해서 mask 작업을 진행합니다.
approxPolyDP 함수 세 번째 인수인 '근사 정확도' 값을 변경 함에 따라 원 도형을 근사하는 커브 갯수에서 차이가 나는 것을 확인할 수 있습니다. 근사 정확도는 이런 개념으로 이해하면 될 것 같습니다.
approxPolyDP(contours[i], conPoly[i], 0.01 * peri, true);
'[ C++ ]' 카테고리의 다른 글
[ openCV | C++ ] HoughLines 함수 사용 방법. (차선 검출 준비단계) (0) | 2021.03.26 |
---|---|
[ openCV | C++ ] Hough Line Transform 이론편.개념정리. (2) | 2021.03.23 |
[ 머신 비전 ] 자율 주행을 구현하기 위해 필요한 것들.(feat. openCV) (0) | 2021.03.15 |
[ openCV | C++ ] drawContours 함수 사용 방법. (0) | 2021.03.07 |
[ openCV | C++ ] 비주얼 스튜디오 코드(Visual Studio Code)에서 openCV 환경 설정 하는 방법(맥 버전) (11) | 2021.03.05 |