본론으로 들어가지 전에 C++ 기초가 부족하시는 분들이 있을 것 같아서
왜 앞에 cv:: 를 붙이나요? 라고 하면 opencv 의 라이브러리(dll)를 생성할 때 namespace cv { 코드 } 형식으로 만들었기 때문에 명시적으로 cv:: 를 적어주는 것이다. 만약 자신의 코드화일의 선언부에 using namespce cv; 를 선언해 주면 cv:: 를 생략해 줘도 상관없다. 하지만 라이브러리 간에 똑같은 함수를 사용하는 경우가 있고 코드를 알기 쉽게 하기 위해서 개인적으로는 cv:: 를 붙여서 코딩하는 것을 선호한다.
- 단순히 선언만 -> 이미지 공간은 할당되지 않고 클래스 변수만 스택에 저장
cv::Mat image; - 이미지 공간 할당
넓이, 높이, 픽셀타입, (옵션)초기값 을 지정한 경우 - (10 x 20) 그레이스케일, 검정(=0) - (10 x 20) 칼러, 검정(=0) |
cv::Mat image(10, 20, CV_8UC1, Scalar(0)); cv::Mat image(10, 20, CV_8UC3, Scalar(0, 0, 0)); 혹은 cv::Mat image(10, 20, CV_8UC3, Scalar::all(0)); cv::Mat image = cv::Mat::create(10,20, Scalar(0)); 추후 생성 cv::Mat image; image.create(10, 20, CV_8UC1); |
초기값 0 의 이미지공간을 생성 | cv::Mat image = cv::Mat::zeros(10, 20, CV_8UC1); cv::Mat image = cv::Mat::zeros(10, 20, CV_8UC3); |
초기값을 미지정해서 이미지공간을 생성한 후, 초기화 | cv::Mat image(10, 20, CV_8UC1); image.setTo(Scalar::all(0)); 혹은 image = Scalar::all(0); |
이미지 화일을 읽어 들인 경우 | cv::Mat image = cv::imread(화일패스); |
이미지처리 함수의 파라미터로 전달할 경우 ※ 이미지처리 함수내의 동작 ① image2 가 빈공간 -> image2.create(...)로 생성 ② image2 의 공간이 이미 할당 -> 기존 공간의 참조 -1, image2.create(...) 새로 생성 |
cv::Mat image = cv::imread(화일패스); cv::Mat image2; cv::cvtColor(image, image2, COLOR_BGR2GRAY); |
똑같은 사이즈, 타입의 공간을 생성 | cv::Mat image2(image.size(), image.type()); |
이미지 공간을 카피해서 새로운 공간을 생성(deep copy) | cv::Mat image2 = image.clone(); image.copyTo(image2); |
스택의 변수는 생성하고 이미지공간은 공유(shallow copy) -> image 의 이미지공간의 참조 + 1 ※ image2 가 이미 이미지공간을 가지고 있었을 경우 ① 기존 이미지공간의 참조카운트가 -1 ② 카운트가 0 가 되었을 경우 자동으로 공간 릴리스 |
cv::Mat image2 = image; 혹은 cv::Mat image2(image); |
참조)
클래스(Mat), 구조체에 (Rect, Point...) 에 있어서 Equal = 의 동작
cv::Mat image = cv::imread(화일패스);
cv::Rect rect = cv::Rect(0,0,100,100);
단순히 할당하는 의미가 아니라 클래스의 operator(=) 를 적용하는 의미 이다.
따라서,
cv::Mat image = cv::Mat::create(10,20, Scalar(0));
는 오른쪽 선언으로 변수명이 없는 새로운 Mat 의 인스턴스를 생성한 후, 왼쪽의 image 클래스 변수의 operator = 를 적용시켜 할당을 하는 방식이다.
따라서 위의 operator = 보다는 아래와 같이 초기화를 사용하는게 효율적일 수 있다.
cv::Mat image(10, 20, CV_8UC1, Scalar(0));
cv::Rect rect (0,0,100,100);
'opencv' 카테고리의 다른 글
공백 메우기 (2) | 2023.12.02 |
---|---|
b/w 이미지의 칼럼(수직방향)별 검정(=0)픽셀수 카운트 (0) | 2023.12.02 |
이미지 회전 (0) | 2023.11.27 |
스캔문서의 기울기 알아보기 - 2 (0) | 2023.11.27 |
스캔문서의 기울기 알아보기 (0) | 2023.11.26 |