1. OpenCV에서 컬러영상을 다루는 법
컬러 영상 표현법
- 빨강, 초록, 파랑 색 성분을 각각 256단계로 표현.
- OpenCV에서는 BGR 순서를 기본으로 사용.
컬러영상 받아오기
Mat img1 = imread("lenna.bmp", IMREAD_COLOR);
Mat img2(rows, cols, CV_8UC3);
Mat img3 = imread("lenna.bmp", IMREAD_GRAYSCALE);
Mat img4;
cvtColor(img3, img4, COLOR_GRAY2BGR);
색상반전
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main() {
Mat src = imread("lenna.bmp");
#if 0
Mat dst = Scalar(255, 255, 255) - src;
#else
Mat dst(src.rows, src.cols, CV_8UC3);
for (int y = 0; y < dst.rows; y++) {
for (int x = 0; x < dst.cols; x++) {
Vec3b& p1 = src.at<Vec3b>(y,x);
Vec3b& p2 = dst.at<Vec3b>(y,x);
p2 = Vec3b(255, 255, 255) - p1;
}
}
#endif
imshow("src", src);
imshow("dst", dst);
waitKey();
}
색 반전에서 255 - src를 하면 안되는 이유
- 255는 Scalar(255, 0, 0) 을 의미. B 성분만 255이고 G, R은 0으로 처리됨. 제대로된 반전x
- Scalar(255, 255, 255) - src로 해주어야함.
결과영상