칼라 이미지를 그레이스케일 이미지로 변환하는 기본적인 방법은
1. 화일을 읽어 들일때 명시적 파라미터(=0)로 지정
cv::Mat gray = cv::imread("이미지 화일 패스", 0);
2. cv::cvtColor 함수로 변환
cv::cvtColor(color, gray, cv::COLOR_BGR2GRAY);
※ OpenCV 의 Mat내의 1픽셀의 칼라 배치는 BMP포맷과 같이 BGR 입니다. RGB가 아닌 이유는 90년대 BMP를 마이크로소프트가 고안을 했고 당시 Windows는 Intel CPU를 채용했기 때문에 Intel CPU의 읽고 쓰기 특성이 Little Endian 방식으로 비트의 배열 시작이 오른쪽에서 왼쪽으로의 방향이였기 때문에 R이 오른쪽에 오고 B가 왼쪽에 배치되는 결과를 낳았습니다.
변환시에는 보통 (R:0.299, G:0.587, B:0.114) 계수치를 사용합니다.
즉 GRAY = R x 0.299 + G x 0.587 + B x 0.114 이 됩니다.
특징적인게 G의 계수값이 월등히 크다는 건데 이는 인간의 시각은 녹색에 민감하기 때문에 녹색에 더 큰 할당을 하는 것 입니다.
커스텀 계수를 사용시에는
// B, G, R 순서에 각각 0.333씩 곱하도록 계수 행렬 설정
cv::Mat coeffs = (cv::Mat_<float>(1, 3) << 0.333, 0.333, 0.333);
cv::transform(color, gray, coeffs);
'opencv' 카테고리의 다른 글
| 자동 2진화 - OTSU (0) | 2026.02.26 |
|---|---|
| Color Transform (0) | 2025.10.30 |
| findContours 의 CV_RETR_TREE 옵션과 hierarchy 의 관계 (0) | 2025.06.26 |
| findContours 의 결과 포인트들을 좀 더 심플하게 가공 (1) | 2025.06.25 |
| Barcode 읽기 (0) | 2025.02.23 |