CV 5주차 10월 17일

Cho's log·2023년 10월 26일

Computer Vision

목록 보기
2/7
post-thumbnail

1. OpenCV로 영상을 불러와서 출력하기

images파일이 HelloCV 프로젝트 파일에 존재해야 한다.

  • 코드를 작성후 결과를 확인 해보자.
#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main()
{
	Mat img = imread("images/lenna.bmp");
	
    // 영상을 불러오지 못할 경우 예외처리
	if (img.empty()) {
		cerr << "Image load failed!" << endl;
		return -1;
	}

	namedWindow("image",WINDOW_AUTOSIZE); // WINDOW_AUTOSIZE를 사용함으로써 출력영상의 크기조절 가능
	imshow("image", img);
	waitKey();
	destroyAllWindows();
}
  • 출력 화면

2. Image Watch 사용 하기

Image Watch란?

  • OpenCV Mat 데이터를 이미지 형태로 보여주는 Visual Studio 확장프로그램
  • 디버깅 시 유용함

설치 방법

  • 아래 과정은 Visual Studio 2015 버전 기준이다.

  • Visual Studio 메뉴에서 도구 -> 확장 및 업데이트 에서 Image Watch 검색 후 다운로드

  • 완료 후 메뉴에 보기 -> 다른 창 -> Image Watch 를 선택해주고 디버깅을 하면 아래와 같은 화면이 보인다.

3. OpenCV의 클래스

Point_ 클래스

  • 2차원 점의 좌표 표현
  • 멤버 변수 : x , y
  • 멤버 함수 : dot() , ddot() , cross() , inside() 등
  • 다양한 사칙 연산에 대한 연산자 오버로딩을 지원
  • 예시
Point pt1, pt2(4, 3), pt3(2, 4);    // pt1 = [0, 0]
int a = 2;

pt1 = pt2 + pt3;    // pt1 = [6, 7]
pt1 = pt2 - pt3;    // pt1 = [2, -1]
pt1 = pt3 * a;    // pt1 = [4, 8]
pt1 = a * pt3;    // pt1 = [4, 8]
pt1 = pt3 / a;    // pt1 = [1, 2]
pt1 += pt2;    // pt1 = [5, 5]
pt1 -= pt2;    // pt1 = [1, 2]
pt1 *= a;    // pt1 = [2, 4]
pt1 /= a;    // pt1 = [1, 2]

double v = norm(pt2);   // v = 5.0 -> 원점에서의 거리
bool b1 = pt1 == pt2;   // b1 = false
bool b2 = pt1 != pt2;   // b2 = true

cout << pt1 << endl;    // [1, 2]

Size_ 클래스

  • 영상 또는 사각형의 크기를 표현
  • 멤버 변수 : width , height
  • 멤버 함수 : area()
  • 다양한 사칙 연산에 대한 연산자 오버로딩을 지원
  • 예시
Rect rc1; // rc1 = [0 x 0 from (0,0)]
Rect rc2(10 , 10 , 60 , 40); // rc2 = [60 x 40 from (10,10)]
Rect rc3 = rc1 + Size(50 , 40); // rc3 = [50 x 40 from (0,0)]
Rect rc4 = rc2 + Point(10 , 10); // rc4 = [60 x 40 from (20,20)]
Rect rc5 = rc3 & rc4; // rc5 = [30 x 20 from (20,20)] -> rc3 과 rc4가 겹치는 부분
Rect rc6 = rc3 | rc4; // rc6 = [80 x 60 from (0,0)] > rc3 과 rc4를 모두 포함하는 부분

Rect_ 클래스

  • 2차원 사각형 표현
  • 멤버 변수 : x , y , width , height
  • 멤버 함수 : tl() , br() , size() , area() , contains()
  • 다양한 사칙 연산에 대한 연산자 오버로딩 지원

0개의 댓글