기초

David8·2022년 9월 3일
0

컴퓨터비전

목록 보기
1/17
post-thumbnail
  • 컴퓨터 비전 시리즈는 한동대학교 황성수 교수님의 컴퓨터비전 강의를 공부하며 정리한 내용입니다.

정의

  1. 컴퓨터가 이미지와 동영상을 이해하는 방식

용어

  1. 픽셀
    1. 모든 이미지는 픽셀로 구성
    2. 모든 동영상은 이미지로 구성
      1. 보통 33ms(1초 = 1000ms)
      2. 사진 간격이 짧을수록 더 부드러움
  2. frame rate
    1. 1초당 비디오의 이미지 갯수
  3. intensity level(화면 강도)
    1. 각 픽셀이 가질 수 있는 값의 갯수
    2. L = 2^k(level 2, 4, 8, 16 ...)
      1. L이 커질수록 더 정교하게 표현 가능 --> 각 영역의 밝기를 세부적으로 표현 가능하기 때문
    3. 보통 L=256
  4. pixel resolution(화면 해상도)
    1. 이미지의 픽셀 수
    2. width X height
    3. ex) hd, fhd 등등
      1. k는 가로 픽셀 의미
      1. ex) 4k uhd --> 4096 X 2160
      2. 8k uhd --> 7680 X 4320
  5. 이미지/동영상 저장 bit
    1. width height bit 수
  6. fps(frame per second)
    1. 초당 보여지는 프레임의 갯수
  7. 저장공간 단위
    1. 1byte = 8bit
    2. 1kb = 1024byte
    3. 1mb = 1024kb
    4. 1gb = 1024mb

mat

  1. opencv에서 가장 기본이 되는 행렬 구조체
  2. 선언

    • Mat (int rows, int cols, int type)
    • Mat (Size size, int type)
    • Mat (const Mat & m)
    • Mat (Size size, int type, const Scalar& s)

  3. 예시

    Mat mtx(3, 3, CV_32F);
    // make a 3x3 floating-point matrix
    Mat mtx(10, 1, CV_64FC2);
    // make a 10x1 2-channel floating-point matrix
    (10-element complex vector)
    Mat img(1080, 1920, CV_8UC3);
    // make a 3-channel (color) image of 1920 columns and 1080 rows.
    Mat img(Size(1920, 1080), CV_8UC3);
    // make a 3-channel (color) image of 1920 columns and 1080 rows.

mat copy

  1. shallow copy
    1. 데이터의 주소 복사
  2. deep copy
    1. 데이터 복사
    2. clone() 사용
    3. copyTo
      1. 사이즈 다른 경우 재조정됨
int main() {

  Mat m1 = (Mat_ < double >(3, 3)
  << 1, 2, 3, 4, 5, 6, 7, 8, 9);

  Mat m_shallow = m1;
  Mat m_deep = m1.clone();
  cout << "m1 =\n" << m1 << endl << endl;
  cout << "m_shallow =\n" << m_shallow << endl << endl; cout << "m_deep =\n" << m_deep << endl << endl;

  // Update m1
  m1.at < double >(0, 0) = 100;
  cout << "m1 =\n" << m1 << endl << endl;
  cout << "m_shallow =\n" << m_shallow << endl << endl; cout << "m_deep =\n" << m_deep << endl << endl;
  
  waitKey(0); 
}

mat conversion

Mat convertTo(OutputArray m, int rtype, double alpha=1, double beta=0)

Mat setTo(InputArray value, InputArray mask=noArray())

void convertScaleAbs(InputArray src, OutputArray dst, double alpha=1, double beta=0)

픽셀 타입

• CV_8U: 8-bit unsigned integer: uchar ( 0~255 )
• CV_8S: 8-bit signed integer: schar ( -128~127 )
• CV_16U: 16-bit unsigned integer: ushort ( 0~65535 )
• CV_16S: 16-bit signed integer: short ( -32768~32767 )
• CV_32S: 32-bit signed integer: int ( -2147483648~2147483647 )
• CV_32F: 32-bit floating-point number: float ( -FLT_MAX~FLT_MAX, INF, NAN )
• CV_64F: 64-bit floating-point number: double (-DBL_MAX~ DBL_MAX, INF, NAN )
• Multi-channel array:
CV_8UC3, CV_8U(3), CV_64FC4, CV_64FC(4)

  1. 채널
    1. 1채널: 흑백(흑과 백, 그 사이 그라데이션으로 나뉘어 지는 1차원 정보)
    2. 3채널: 컬러(r,g,b)
  2. 컬러
    1. scalar(255,0,0)
    2. b,g,r 순서

0개의 댓글