.Net 교육/OpenCV(C++)

OpenCV(C++) - User Interface 01

pi92 2021. 5. 17. 16:57

키보드 제어하기

#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

//cout << "[m2] = " << endl << m2 << endl;


int main(void)
{
	Mat image(200, 300, CV_8U, 255);
	namedWindow("키보드", WINDOW_AUTOSIZE);
	imshow("키보드", image);

	while (1)
	{
		int key = waitKeyEx(20);
		if (key == 27) // esc : 27
			break;

		switch (key)
		{
		case 'a': cout << "a 입력" << endl;
			break;
		case 'b': cout << "b 입력" << endl;
			break;
		case 0x41: cout << "A 입력" << endl;
			break;
		case 66: cout << "B 입력" << endl;
			break;
		case 0x250000: cout << "왼쪽 화살표 입력" << endl;
			break;
		case 0x260000: cout << "위쪽 화살표 입력" << endl;
			break;
		case 0x270000: cout << "오른쪽 화살표 입력" << endl;
			break;
		case 0x280000: cout << "아래쪽 화살표 입력" << endl;
			break;
		}
	}

	return 0;
}

 

이미지 출력

 

int main(void)
{
	string fileName = "Image/cat1.jpg";
	Mat image = imread(fileName, IMREAD_COLOR);
	imshow("image", image);

	waitKey();

	return 0;
}

 

트랙바 이벤트

#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

//cout << "[m2] = " << endl << m2 << endl;

string title = "트랙바";
Mat image;

void onChange(int value, void* userData)
{
	int add_value = value - 127;
	cout << "추가 화소값" << add_value << endl;
	Mat tmp = image + add_value;
	imshow(title, tmp);
}

int main(void)
{
	int value = 128;
	image = Mat(300, 400, CV_8UC1, Scalar(120));

	namedWindow(title, WINDOW_AUTOSIZE);
	createTrackbar("밝기값", title, &value, 255, onChange);

	imshow(title, image);
	waitKey(0);

	return 0;
}

 

 

 

선, 사각형 그리기

#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;


int main(void)
{
	Scalar red(0, 0, 255), green(0, 255, 0), blue(255, 0, 0);
	Scalar white(255, 255, 255);
	Scalar yellow(0, 255, 255);

	Mat image(400, 600, CV_8UC3, white);
	Point pt1(50, 130), pt2(200, 300), pt3(300, 150), pt4(400, 50);
	Rect rect(pt3, Size(200, 150));

	// void line(
	// InputOutputArray img, 
	// Point pt1, 
	// Point pt2, 
	// const Scalar& color,
	//	int thickness = 1, int lineType = LINE_8, int shift = 0);


	line(image, pt1, pt2, red);
	line(image, pt3, pt4, green, 2, LINE_AA);
	line(image, pt3, pt4, blue, 6, LINE_8, 1);//모든 좌표값 >> 1 (크기가 1/2 배)

	rectangle(image, rect, green, 2);
	//FILLED : 색 체우기
	rectangle(image, rect, blue, FILLED, LINE_4, 1);//모든 좌표값 >> 1 (크기가 1/2 배)
	rectangle(image, pt1, pt2, red, 3);

	imshow("직선 사각형", image);
	waitKey(0);

	return 0;
}

int main(void)
{
	Scalar olive(128, 128, 0), violet(221, 160, 221), brown(42, 42, 165);
	Point pt1(20, 100), pt2(20, 200), pt3(20, 250);

	Mat image(300, 500, CV_8UC3, Scalar(255, 255, 255));

	//void putText( 
	// InputOutputArray img, 
	// const String& text, 
	// Point org,
	// int fontFace, 
	// double fontScale, 
	// Scalar color,
	//	int thickness = 1, int lineType = LINE_8, bool bottomLeftOrigin = false );

	putText(image, "SIMPLEX", Point(20, 30), FONT_HERSHEY_SIMPLEX, 1, brown);
	putText(image, "DUPLEX", pt1, FONT_HERSHEY_DUPLEX, 2, olive);
	putText(image, "TRIPLEX", pt2, FONT_HERSHEY_TRIPLEX, 3, violet);
	putText(image, "ITALIC", pt3, FONT_HERSHEY_PLAIN | FONT_ITALIC, 2, violet);

	imshow("putText", image);
	waitKey(0);

	return 0;
}

원 만들기

int main(void)
{
	Scalar orange(0, 165, 255), blue(255, 0, 0), magenta(255, 0, 255);
	Mat image(300, 500, CV_8UC3, Scalar(255, 255, 255));

	Point center = (Point)image.size() / 2;
	Point pt1(70, 50), pt2(350, 220);

	//void circle(
	// InputOutputArray img, 
	// Point center, 
	// int radius,
	//	const Scalar & color, int thickness = 1,	int lineType = LINE_8, int shift = 0);

	circle(image, center, 100, blue);
	circle(image, pt1, 80, orange, 2);
	circle(image, pt2, 60, magenta, -1);

	int font = FONT_HERSHEY_COMPLEX;
	putText(image, "center_blue", center, font, 1.2, blue);
	putText(image, "pt1_orange", pt1, font, 0.8, orange);
	putText(image, "pt2_magenta", pt2 + Point(2, 2), font, 0.5, Scalar(0, 0, 0), 2);
	putText(image, "pt2_magenta", pt2, font, 0.5, magenta, 1);

	imshow("원", image);
	waitKey(0);

	return 0;
}

 

타원 만들기

int main(void)
{
	Scalar orange(0, 165, 255), blue(255, 0, 0), magenta(255, 0, 255);
	Mat image(300, 700, CV_8UC3, Scalar(255, 255, 255));

	Point pt1(120, 150), pt2(550, 150);

	circle(image, pt1, 1, Scalar(0), 1);
	circle(image, pt2, 1, Scalar(0), 1);

	//void ellipse(
	// InputOutputArray img, 
	// Point center, 
	// Size axes,
	//	double angle,   //회전 각도
	// double startAngle, 
	// double endAngle,  
	//	const Scalar & color, int thickness = 1,	int lineType = LINE_8, int shift = 0);

	ellipse(image, pt1, Size(100, 60), 0, 0, 360, orange, 2);
	ellipse(image, pt1, Size(100, 60), 0, 30, 270, blue, 4);

	ellipse(image, pt2, Size(100, 60), 30, 0, 360, orange, 2);
	ellipse(image, pt2, Size(100, 60), 30, -30, 160, blue, 4);
	//ellipse(image, pt2, Size(100, 60), 30, 330, 160, blue, 4);

	imshow("타원", image);
	waitKey(0);


	return 0;
}