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) 이 출력됐다.
'DevelopmentTool > OpenCV' 카테고리의 다른 글
[OpenCV] VideoCapture 클래스 (0) | 2022.11.17 |
---|---|
[OpenCV] InputArray, OutputArray 클래스 (0) | 2022.11.17 |
[OpenCV] Vec 클래스 (0) | 2022.11.17 |
[OpenCV] Mat 클래스의 크기 및 타입 변환 함수 (0) | 2022.11.17 |
[OpenCV] Mat 클래스의 픽셀 접근 방법 (0) | 2022.11.17 |