컬러영상 다루기

전종원·2022년 10월 26일
0

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); //이 경우 B,G,R 색 성분 값이 모두 같게 설정됨

색상반전

#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; // 255 - src 라고 하면 안됨(Scalar(255,0,0) 을 의미하므로)

#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[0] = 255 - p1[0]; // blue
        // p2[1] = 255 - p1[1]; // green
        // p2[2] = 255 - p1[2]; // red
        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로 해주어야함.

결과영상

0개의 댓글