DevelopmentTool/OpenCV

[OpenCV] Scalar 클래스

유제필 2022. 11. 17. 08:55

OpenCV 에서 Mat 클래스 다음으로 자주 사용되는 클래스가 Scalar 클래스이다.

Scalar 클래스는 영상에서 픽셀 값을 표현하는 용도로 자주 사용된다.

Scalar 클래스는 Scalar_ 라는 이름의 클래스 템플릿 이름 재정의 이며,

Scalar_ 클래스는 Vec 클래스를 상속받아 만들어졌다.

 

template<typename _Tp> class Scalar_ : public vec<_Tp, 4>
{
public:
     Scalar_();                         // Scalar_ 클래스 기본 생성자
     Scalar_(_Tp, v0);                  // Scalar_ 클래스 생성자
     Scalarl_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);

     static Scalar_<_Tp> all(_Tp v0);   // Scalar_::all() 멤버 함수는 4개의 val 배열 값을 모두 v0으로 설정한 Scalar_ 객체를 반환한다.
     ...
};

typedef Scalar_<double> Scalar;         // double 자료형을 사용하는 Scalar_ 클래스에 대해 Scalar 라는 이름으로 재정의

 

Scalar_ 클래스는 Vec 클래스를 상속받은 4개의 원소를 가진 템플릿 클래스이다.

Scalar 클래스는 보통 4개 이하의 채널을 갖는 영상의 픽셀 값을 표현하는 용도로 많이 사용된다.

그레이스케일 영상일 경우 : 1번 째 원소가 픽셀 밝기를 표현하고, 나머지는 0으로 설정된다.

 

트루컬러 영상일 경우 : 처음 3개 원소가 B(파란색), G(녹색), R(빨간색) 으로 색상 성분 값을 표현하고 4번 째 원소는 보통 0으로 설정된다.

PNG 파일 형식처럼 투명도를 표현하는 알파 채널이 있는 경우 4번 째 원소를 사용한다.

 

// GrayScale
Scalar(밝기)

// TrueColor
Scalar(B, G, R)
Scalar(B, G, R, A) // A = 투명도

 

Scalar 클래스를 사용한 예제

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	Scalar gray = 128;                      // Scalar 클래스 타입의 변수 gray에 [128, 0, 0, 0] 값 저장
	cout << "gray : " << gray << endl;      // gray 값 콘솔 출력

	Scalar blue(255, 0, 0);                 // b(2550, g(0), r(0)
	cout << "blue : " << blue << endl;

	Mat img1(520, 480, CV_8UC3, blue);

	imshow("img1", img1);

	waitKey(0);

	return 0;
}

 

Scalar 클래스 타입의 변수 gray에 128 정수 하나만을 이용하여 초기화하였다.

gray 변수가 가지고 있는 4개의 double형 원소 중 1번째 원소만 128로 설정되고 나머지 3개의 원소는 0으로 초기화된다.

blue 변수는 4개의 double형 원소 중 앞의 3 원소는 255, 0, 0 으로 설정되고 마지막 4번째 원소는 0으로 초기화된다.

Scalar 클래스도 C/C++ 표준 입출력을 지원하므로,

std::cout을 이용하여 원소 값을 간단하게 출력해서 확인할 수 있다.

 

gray : [128, 0, 0, 0]
blue : [255, 0, 0, 0]

 

세로520 x 가로480 크기의 변수 blue(255, 0, 0, 0) 이 출력됐다.