색(color)
사람의 눈이 색을 인지하는 과정
색상 표현 방법
색 공간 변환
RGB 색 공간
HSV 색 공간
HSV 값 범위
YCrCb 색 공간
YCrCb 값 범위
채널 분리
void split(const Mat& src, Mat* mvbegin);
void split(InputArray src, OutputArrayOfArrays mv);
vector<Mat>
Mat src = imread("lenna.bmp");
vector<Mat> planes;
split(src, planes);
void merge(const Mat* mv, size_t count, OutputArray dst);
void split(InputArrayOfArrays mv, OutputArray dst);
Mat src = imread("lenna.bmp");
vector<Mat> planes;
split(src, planes);
swap(planes[0], planes[2]);
Mat dst;
merge(planes, dst);
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
void split_bgr();
void split_hsv();
void split_ycrcb();
int main()
{
split_bgr();
split_hsv();
split_ycrcb();
}
void split_bgr()
{
Mat src = imread("candies.png", IMREAD_COLOR);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
// RGB 색상 평면 나누기
vector<Mat> bgr_planes;
split(src, bgr_planes);
imshow("src", src);
imshow("B plane", bgr_planes[0]);
imshow("G plane", bgr_planes[1]);
imshow("R plane", bgr_planes[2]);
waitKey();
destroyAllWindows();
}
void split_hsv()
{
Mat src = imread("candies.png", IMREAD_COLOR);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
// HSV 색상 평면 나누기
Mat src_hsv;
cvtColor(src, src_hsv, COLOR_BGR2HSV);
vector<Mat> hsv_planes;
split(src_hsv, hsv_planes);
imshow("src", src);
imshow("H plane", hsv_planes[0]);
imshow("S plane", hsv_planes[1]);
imshow("V plane", hsv_planes[2]);
waitKey();
destroyAllWindows();
}
void split_ycrcb()
{
Mat src = imread("candies.png", IMREAD_COLOR);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
// YCrCb 색상 평면 나누기
Mat src_ycrcb;
cvtColor(src, src_ycrcb, COLOR_BGR2YCrCb);
vector<Mat> ycrcb_planes;
split(src_ycrcb, ycrcb_planes);
imshow("src", src);
imshow("Y plane", ycrcb_planes[0]);
imshow("Cr plane", ycrcb_planes[1]);
imshow("Cb plane", ycrcb_planes[2]);
waitKey();
destroyAllWindows();
}