Library/OpenCV

OpenCV] findContours를 사용해 윤곽(contour) 추출하기

TwinParadox 2018. 4. 26. 22:57
728x90

findContours를 이용해서 윤곽(contour)을 추출하는 걸 시도했다.

외곽선 경계가 명확하지 않은 것도 있고, 응용 방법을 잘 몰라서 경계선이 명확히 그어지지 않은 것도 있는 듯 하다.



소스코드

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(void)
{
	Mat image;
	image = imread("IU.jpg", 1);
	namedWindow("Display Window", CV_WINDOW_AUTOSIZE);
	imshow("Display Window", image);
	Mat gray;
	cvtColor(image, gray, CV_BGR2GRAY);
	Canny(gray, gray, 100, 200, 3);

	vector<vector<Point> > contours;
	vector<Vec4i> hierarchy;
	RNG rng(12345);
	findContours(gray, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
	Mat drawing = Mat::zeros(gray.size(), CV_8UC3);
	for (int i = 0; i< contours.size(); i++)
	{
		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
		drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point());
	}

	imshow("Result window", drawing);
	waitKey(0);
}




결과물


728x90