본문 바로가기
opencv

(opencv) Mat 의 기초

by 꼰대코더 2023. 8. 5.

cv::Mat (cv 는 namespace를 의미하고 특별을 using namespace cv; 를 명시하지 않는 이상 지정을 해야 함)

  • 2D (W x H) 이미지 정보를 보관하는 클래스
  • 이미지 데이터는 힙메모리에 존재하고  cv::Mat 는 메모리 주소를 보관하게 된다.
  • 이미지 메모리는 명시적으로 release() 멤버 함수를 이용하여 명시적으로 삭제 할 수 있으나 암시적으로 참조 카운트가 0 가 되었을 때 자동 삭제된다. 
  • 메모리 삭제 코드의 누락으로 이미지 메모리가 좀비로 될 가능성이 없다.
  • 기본적으로 메모리상 이미지 색상의 저장 순서는 B G R 순이다. (관습상 BMP 포멧 배열이기 때문)

type()

  • 1 픽셀의 내부 구성요소를 의미한다.

여러 타입이 있지만 이미지 처리에선 아래 2가지만 생각하자.
CV_8UC1 : 8bits Unsigned Component 1개 = gray image
CV_8UC3 : 8bits Unsigned Component 3개 = color(BGR) image
※ Unsigned = 이미지의 픽셀레벨이 0-255 이므로 부호없는 타입이기 때문이다


cv::Mat 인스턴스(= 메모리 확보)를 생성하는 방법

  • 캉통 인스턴스
    cv::Mat image;
  • 캉통 인스턴스에 이미지 파일을 로드하여 결부
    image = cv::imread(풀 패스);
  • 캉통 인스턴스에 이미지 처리 결과를 카피하여 결부
    cv::cvtColor( 칼라Mat인스턴스, image, cv::COLOR_BGR2GRAY);

  • 이미지 메모리 공간을 확보
    ※ ( 사이즈 정보, 타입, 초기값 )
    cv::Mat image(cv::Size(넓이, 높이), cv::CV_8UC3, cv::Scalar(0, 0, 0));
    cv::Mat image = cv::Mat(cv::Size(넓이, 높이), cv::CV_8UC3, cv::Scalar(0, 0, 0));
     초기값을 지정없이  cv::Mat::zeros 로 정의
    cv::Mat image = cv::Mat::zeros(cv::Size(넓이, 높이), cv::CV_8UC3);

'opencv' 카테고리의 다른 글

스캔문서의 기울기 알아보기  (0) 2023.11.26
(opencv) 이미지 저장형태, 액서스  (1) 2023.11.25
(opencv) Rectangle 간의 조작에 관해  (1) 2023.11.23
(opencv) pixel access time  (0) 2023.08.09
(opencv) 환경설정  (0) 2023.08.05