• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[011] OpenCV 영상처리 죄표계, 선분그리기

19 Jan 2020

Reading time ~2 minutes

Table of Contents
  • 목차
  • OpenCV 좌표계
    • 예제
      • C++
      • PYTHON
  • 선분 그리기
    • 예제
      • C++
      • Python

목차

  • OpenCV 좌표계
    • 예제
      • C++
      • PYTHON
  • 선분 그리기
    • 예제
      • C++
      • Python

OpenCV 좌표계

OpenCV에서는 이미지의 왼쪽 위가 원점 (0, 0).
image 오른쪽으로 갈수록 x값이 증가하고, 아래쪽으로 갈수록 y값이 증가

예제

컬러 이미지를 위한 Mat 객체·넘파이 배열을 생성하고, 노란색 원을 (100, 300) 에 그리기
[주의] 좌표의 첫 번째 원소가 × 좌표이고, 두 번째 원소가 y 좌표.

image

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에서는 나중에 그린 것이 기존 픽셀값을 대체하기 때문에 기존에 그린 것 위에 올라감

image

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);


OpenCV Share Tweet +1