내맘대로 공부기록.

[ C++ ]

[ openCV | C++ ] drawContours 함수 사용 방법.

fwanggus 2021. 3. 7. 21:41
반응형

어떤 함수 🤔 

"그리는" 함수 입니다. 컨투어를 검출하는 작업이 아닌, 검출된 컨투어 데이터를 이미지에 뿌려서, 이미지를 표현 하는 함수입니다.

 

  drawContours(
        타겟이미지, 
        검출된 컨투어 포인트 어레이, 
        포인트 어레이 인덱스, 
        컨투어 색상, 
        컨투어 라인 두께, 
        컨투어 라인 타입,
        ... 
        )

 

매개변수 (설명)

 

🔑  타겟이미지 : 컨투어 라인을 그릴 이미지를 지정합니다. Mat 형태의 이미지 파일을 지정하면 됩니다.

🔑  검출된 컨투어 포인트 어레이 : approxPolyDP 함수를 이용하여 얻어진, 다각형을 표현하는 (근사된) 포인트 집합 데이터를 대입합니다. 이 데이터를 생성하기 위해서는 findContours 작업이 선행되어야 합니다. 

🔑  포인트 어레이 인덱스 : 두번째 인수(어레이)의 인덱스 값을 지정합니다. 이미지 소스로부터 감지한 컨투어는 단수 또는 복수의 어레이 형태로 저장됩니다. 그렇기 때문에, 그 인덱스를 지정해주는 개념입니다.
🔑  컨투어 색상 : 컨투어의 색상을 지정합니다. Scalar 클래스를 이용합니다.
🔑  컨투어 라인 두께 : 컨투어 라인의 두께를 지정합니다. 정수 형태 데이터를 이용합니다.

🔑  컨투어 라인 타입 : FILLED, LINE_4, LINE_8, LINE_AA 종류가 있는 것 같습니다. 필자는 타입은 지정하지 않고 주로 디폴트 형태로 사용합니다.

🔑  ...  : 나머지는 공홈 참고.

 

공홈 링크는 다음과 같습니다.

 

OpenCV: Drawing Functions

void cv::arrowedLine (InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int line_type=8, int shift=0, double tipLength=0.1)  Draws a arrow segment pointing from the first point to the second one. More...   void cv::circl

docs.opencv.org

 

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);
    	}
    
    ...

 

 

좌 : 원본 이미지, 우 : 컨투어 표시 이미지(보라색)

 

 

반응형