목차
OpenCV 좌표계
OpenCV에서는 이미지의 왼쪽 위가 원점 (0, 0).
오른쪽으로 갈수록 x값이 증가하고, 아래쪽으로 갈수록 y값이 증가
예제
컬러 이미지를 위한 Mat 객체·넘파이 배열을 생성하고, 노란색 원을 (100, 300) 에 그리기
[주의] 좌표의 첫 번째 원소가 × 좌표이고, 두 번째 원소가 y 좌표.
C++
# include <opencv2/opencv.hpp>
# include < iostream>
using namespace cv;
using namespace std;
int main()
{
// 컬러 이미지를 위한 빈 Mat 객체를 생성합니다.
int width = 640;
int height = 480;
Mat img(height, width, CV_8UC3);
// 이미지의 너비, 높이, 채널 수를 가져오는 방법입니다.
int img_h = img.rows;
int img_w = img.cols;
int img_bpp = img.channels();
cout << img_h << " " << img_w << " " << img_bpp << endl;
// 그리기 함수에서는 좌표를 (x, y) 순으로 적습니다.
// (x, y) = (100, 300) 위치에 노란색 원을 그립니다.
// 나머지 아규먼트는 뒤에서 다룹니다.
circle(img, Point(100, 300), 10, Scalar(0, 255, 255), - 1);
imshow("drawing", img);
waitKey(0);
}
PYTHON
import numpy as np
import cv2 as cv
# 컬러 이미지를 위한 빈 넘파이 배열를 생성합니다.
width = 640
height = 480
img = np.zeros((height, width, 3), np.uint8)
# 이미지의 너비, 높이, 채널 수를 가져오는 방법입니다.
img_h = img.shape[0]
img_w = img.shape[1]
img_bpp = img.shape[2]
print(img_h, img_w, img_bpp)
# 그리기 함수에서는 좌표를 (x, y) 순으로 적습니다.
# (x, y) = (100, 300) 위치에 노란색 원을 그립니다.
# 나머지 아규먼트는 뒤에서 다룹니다.
cv.circle(img, (100, 300), 10, (0, 255, 255), - 1)
cv.imshow("drawing", img)
cv.waitKey(0);
선분 그리기
선을 그리기 위한 line함수
를 제공
C++: void cv::line( InputOutputArray img, Point pt1, Point pt2, const Scalar & color, int thickness = 1)
Python: Img = cv.line( img, pt1, pt2, color[, thickness] )
- Img : 선분을 그릴 이미지
- pt1 : 선분의 시작점
- pt2 : 선분의 끝점
- color : 선의 색
- thickness : 선의 굵기
예제
빨간색, 초록색 대각선을 그리는 예제입니다.
나중에 그린 빨간색 선이 초록색 선위에 그려짐.
OpenCV에서는 나중에 그린 것이 기존 픽셀값을 대체하기 때문에 기존에 그린 것 위에 올라감
C++
# include < opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 컬러 이미지를 저장할 Mat 개체를 생성합니다.
int width = 640;
int height = 480;
Mat img(height, width, CV_8UC3, Scalar(0, 0, 0));
// 화면 중앙을 가로질러 선굵기 3인 대각선을 2개 그려 교차하도록 합니다.
line(img, Point(width-1, 0), Point(0, height-1), Scalar(0, 255, 0), 3);
line(img, Point(0, 0), Point(width-1, height-1), Scalar(0, 0, 255), 3);
imshow("result", img);
waitKey(0);
return 0;
}
Python
import numpy as np
import cv2 as cv
# 컬러 이미지를 저장할 넘파이 배열을 생성합니다.
# bpp(=bits per pixel)
width = 640
height = 480
bpp = 3
img = np.zeros((height, width, bpp), np.uint8)
# 화면 중앙을 가로질러 선굵기 3인 대각선을 2개 그려 교차하도록 합니다.
cv.line(img, (width-1, 0), (0, height-1), (0, 255, 0), 3)
cv.line(img, (0, 0), (width-1, height-1), (0, 0, 255), 3)
cv.imshow("result", img)
cv.waitKey(0);