#include <iostream>
#include "opencv2/opencv.hpp"

int drawLines();
int drawPolys();

int main() {
	return drawPolys();
}

int drawLines() {
	cv::Mat img(400, 400, CV_8UC3, cv::Scalar(255, 255, 255));

	cv::line(img, cv::Point(50, 50), cv::Point(200, 50), cv::Scalar(0, 0, 255));
	cv::line(img, cv::Point(50, 100), cv::Point(200, 100), cv::Scalar(255, 0, 255), 3);
	cv::line(img, cv::Point(50, 150), cv::Point(200, 150), cv::Scalar(255, 0, 0), 10);

	cv::line(img, cv::Point(250, 50), cv::Point(350, 100), cv::Scalar(0, 0, 255), 1, cv::LINE_4);
	cv::line(img, cv::Point(250, 70), cv::Point(350, 120), cv::Scalar(255, 0, 255), 1, cv::LINE_8);
	cv::line(img, cv::Point(250, 90), cv::Point(350, 140), cv::Scalar(255, 0, 0), 1, cv::LINE_AA);

	cv::arrowedLine(img, cv::Point(50, 200), cv::Point(150, 200), cv::Scalar(0, 0, 255), 1);
	cv::arrowedLine(img, cv::Point(50, 250), cv::Point(350, 250), cv::Scalar(255, 0, 255), 1);
	cv::arrowedLine(img, cv::Point(50, 300), cv::Point(350, 300), cv::Scalar(255, 0, 0), 1, cv::LINE_8, 0, 0.05);

	cv::drawMarker(img, cv::Point(50, 350), cv::Scalar(0, 0, 255), cv::MARKER_CROSS);
	cv::drawMarker(img, cv::Point(100, 350), cv::Scalar(0, 0, 255), cv::MARKER_TILTED_CROSS);
	cv::drawMarker(img, cv::Point(150, 350), cv::Scalar(0, 0, 255), cv::MARKER_STAR);
	cv::drawMarker(img, cv::Point(200, 350), cv::Scalar(0, 0, 255), cv::MARKER_DIAMOND);
	cv::drawMarker(img, cv::Point(250, 350), cv::Scalar(0, 0, 255), cv::MARKER_SQUARE);
	cv::drawMarker(img, cv::Point(300, 350), cv::Scalar(0, 0, 255), cv::MARKER_TRIANGLE_UP);
	cv::drawMarker(img, cv::Point(350, 350), cv::Scalar(0, 0, 255), cv::MARKER_TRIANGLE_DOWN);

	cv::imshow("img", img);
	cv::waitKey(0);

	cv::destroyAllWindows();
	return 0;
}

int drawPolys() {
	cv::Mat img(400, 400, CV_8UC3, cv::Scalar(255, 255, 255));

	cv::rectangle(img, cv::Rect(50, 50, 100, 50), cv::Scalar(0, 0, 255), 2);
	cv::rectangle(img, cv::Rect(50, 150, 100, 50), cv::Scalar(0, 0, 128), -1);

	cv::circle(img, cv::Point(300, 120), 30, cv::Scalar(255, 255, 0), -1, cv::LINE_AA);
	cv::circle(img, cv::Point(300, 120), 60, cv::Scalar(255, 0, 0), 3, cv::LINE_AA);

	cv::ellipse(img, cv::Point(120, 300), cv::Size(60, 30), 20, 0, 270, cv::Scalar(255, 255, 0), -1, cv::LINE_AA);
	cv::ellipse(img, cv::Point(120, 300), cv::Size(100, 50), 20, 0, 360, cv::Scalar(0, 255, 0), 2, cv::LINE_AA);

	std::vector<cv::Point> pts;
	pts.push_back(cv::Point(250, 250)); pts.push_back(cv::Point(300, 250));
	pts.push_back(cv::Point(300, 300)); pts.push_back(cv::Point(350, 300));
	pts.push_back(cv::Point(350, 350)); pts.push_back(cv::Point(250, 350));
	cv::polylines(img, pts, true, cv::Scalar(255, 0, 255), 2);

	cv::putText(img, "KimMinSu 20518009", cv::Point(50, 30), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 0, 255), 2, cv::LINE_AA);

	cv::imshow("img", img);
	cv::waitKey(0);

	cv::destroyAllWindows();
	return 0;
}