2021. 5. 17. 16:57 .Net 교육/OpenCV(C++)
OpenCV(C++) - User Interface 01
키보드 제어하기
#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;
}
'.Net 교육 > OpenCV(C++)' 카테고리의 다른 글
OpenCV(C++) - 행렬 연산 02 (0) | 2021.05.21 |
---|---|
OpenCV(C++) - 행렬 연산 01 (0) | 2021.05.20 |
OpenCV(C++) - User Interface 02 (0) | 2021.05.18 |
OpenCV(C++) - 기본데이터 타입 (0) | 2021.05.17 |
OpenCV(C++) 사용하기 (0) | 2021.05.14 |