차례대로, 영상 Mat, 좌표점1, 좌표점2, 색상, 두께(-1이면 color 색상으로 채운 사각형을 그림), 타입, 시프트연산을 뜻한다.
void rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, ins shift=0);
이 함수는 영상 img에 사각형 rec에 의해 정의되는 직사각형을 color 색상으로 thickness 두께로 사각형을 그리는 것이다.
직선 클리핑을 하는 함수 clipLine
bool clipLine(Size imgSize, Point& pt1, Point& pt2);
bool clipLine(Rect imgRect, Point& pt1, Point& pt2);
클리핑 기능을 수행하는 이 함수는 좌표점 pt1에서 pt2 까지 연결하는 라인이 imgSize 또는 imgRect로 정의되는 사각형에 의해 절단되는 좌표점을 pt1과 pt2에 계산하는 함수이다. 만약 직선이 사각형 영역 밖에 있으면 false를 반환한다.
Rect의 형태는 Rect(0, 0, imgSize.width, imgSize.height); 이다.
아래 예제의 첫번째 결과는 사각형을 그리고 그 사각형의 1/2 사이즈의 사각형을 그리고 대각선을 긋는 예제이고, 두번째 결과는 직선이 사각형에 의해 절단되는 부분을 원으로 그려 표시한 예제이다.
소스코드
#include<opencv2/opencv.hpp> using namespace cv; using namespace std; int main(){ /* 1. basic line, rectangle drawing */ // white windows create, 512 x 512, 3 channels Mat dstImage(512, 512, CV_8UC3, Scalar(255, 255, 255)); if (dstImage.empty()) return -1; // drawing (100,100)~(400,400), red rectangle, thickness is 2 rectangle(dstImage, Point(100, 100), Point(400, 400), Scalar(0, 0, 255), 2); // red diagonal line drawing, thickness is 2 line(dstImage, Point(400, 100), Point(100, 400), Scalar(0, 0, 255), 2); // 1/2 size blue rectangle create rectangle(dstImage, Point(400 / 2, 100 / 2), Point(100 / 2, 400 / 2), Scalar(255, 0, 0)); imshow("result 1", dstImage); // windows clear -> white for (int i = 0; i < dstImage.rows; i++) for (int j = 0; j < dstImage.cols; j++) dstImage.at<Vec3b>(i, j) = Vec3b(255, 255, 255); waitKey(); /* 2. line cliping start */ Rect imgRect(100, 100, 300, 300); // 두 모서리 좌표를 .tl(), .br()을 이용하여 반환 rectangle(dstImage, imgRect.tl(), imgRect.br(), Scalar(255, 0, 0), 2); Point pt1(120, 50), pt2(300, 500); line(dstImage, pt1, pt2, Scalar(0, 255, 0), 2); // clipLine함수는 라인이 사각형에 의해 절단되는 좌표점을 pt1, pt2에 계산 clipLine(imgRect, pt1, pt2); cout << "pt1 = " << pt1 << endl; cout << "pt2 = " << pt2 << endl; // 절단되는 좌표점에 원을 그림 circle(dstImage, pt1, 5, Scalar(0, 0, 255), 2); circle(dstImage, pt2, 5, Scalar(0, 0, 255), 2); line(dstImage, pt1, pt2, Scalar(255, 0, 0), 2); imshow("result 2", dstImage); waitKey(); return 0; }
[그림 1] 직선 그리기, 사각형 그리기, 직선 클리핑을 한 결과
'Programming > OpenCV' 카테고리의 다른 글
OpenCV contrib 설치 및 Cmake (4) | 2016.11.14 |
---|---|
OpenCV 설치 시 에러 LNK1112 (0) | 2016.11.12 |
OpenCV 기본클래스 (3) (0) | 2016.08.13 |
OpenCV 기본클래스 (2) (0) | 2016.08.13 |
OpenCV 기본클래스 (1) (7) | 2016.08.13 |