OpenCV 4 Code 12-3

OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝 中
코드 12-3 외곽선 검출과 그리기

<전체코드>

void contours_basic() {
	Mat src = imread("contours.bmp", IMREAD_GRAYSCALE);
	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}
    
	vector<vector<Point>> contours;
	findContours(src, contours, RETR_LIST, CHAIN_APPROX_NONE);

	Mat dst;
	cvtColor(src, dst, COLOR_GRAY2BGR);
	
	for (int i = 0; i < contours.size(); i++) {
		Scalar c(rand() & 255, rand() & 255, rand() & 255);
		drawContours(dst, contours, i, c, 2);
	}

	imshow("src", src);
	imshow("dst", dst);

	waitKey();
	destroyAllWindows();
}

01. 파일 불러오기

Mat src = imread("contours.bmp", IMREAD_GRAYSCALE);
	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;

contours.bmp 파일을 그레이스케일 형식으로 불러와 src에 저장합니다. contours.bmp는 픽셀값이 0과 255로 구성된 이진 영상입니다.

02. 외곽선 검출

vector<vector<Point>> contours;
	findContours(src, contours, RETR_LIST, CHAIN_APPROX_NONE);

src 영상으로부터 모든 외곽선을 검출합니다. 외곽선의 계층 정보는 추출하지 않습니다.
하나의 영상에 여러 개의 객체가 존재할 수 있으므로 영상 하나에서 추출된 전체 객체의 외곽선 정보는 vector<vector<Point>> 타입으로 표현할 수 있습니다.
OpenCV에서 영상 내부 객체들의 외곽선을 검출하는 함수 이름은 findContours()입니다.
src 영상으로부터 모든 외곽선을 검출하고, 외각선의 계층 정보는 추출하지 않습니다.

03. GRAY to BGR

Mat dst;
	cvtColor(src, dst, COLOR_GRAY2BGR);

src 영상을 3채널 컬러 영상으로 변환하여 dst에 저장합니다.

03. 전체 외곽선 for 반목문 수행 및 외곽선 그리기

for (int i = 0; i < contours.size(); i++) {
		Scalar c(rand() & 255, rand() & 255, rand() & 255);
		drawContours(dst, contours, i, c, 2);
	}

전체 외곽선 개수만큼 for 반복문을 수행하고, contours에 저장된 각각의 외곽선을 임의의 색상으로 그립니다.

좋은 웹페이지 즐겨찾기