코드:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <opencv2/opencv.hpp>
 
using namespace std;
using namespace cv;
 
int main() {
    Mat image = imread("boldt.jpg"); //read a image
    Mat hsv;
    cvtColor(image, hsv, COLOR_BGR2HSV); //convert BGR to HSV
    vector<Mat>  channels;
    split(hsv, channels); //split to h,s,v
    //channels[0] 색상(H),  channels[1]  채도(S),  channels[2]  명도(V)
    //각 채널 출력
    imshow("Original", image); //original
    imshow("Hue", channels[0]); //hue
    imshow("Saturate", channels[1]); //saturate
    imshow("Value", channels[2]); //value
    channels[2= 255//value to max
    merge(channels, hsv); //merge h,s,v
    Mat newImage;
    cvtColor(hsv, newImage, COLOR_HSV2BGR); //convert HSV to BGR
    imshow("Fixed Value Image", newImage);
    waitKey(0);
 
    return 0;
}
 
cs

 

실행결과:

 

설명:

cvtColor(image, hsv, COLOR_BGR2HSV); 

눈치가 빠르다면 단번에 코드의 의미를 파악할 수 있다. cvtColor()함수를 이용하여 COLOR_BGR2HSV 즉 BGR이미지에서 HSV이미지로 변환시키는 코드.

 

    vector<Mat>  channels;

    split(hsv, channels); 

개인적으로 신기했던 코드. Mat형식의 벡터를 만든다음 split()함수를 이용하여 각 벡터에 H, S, V의 이미지를 저장.

 

이후 코드는 이해가능할 것이다.

'C,C++ > Opencv, c++' 카테고리의 다른 글

Opencv, c++, threshold()  (0) 2019.10.04
Opencv, c++, imshow, imwrite  (0) 2019.10.04
Opencv, c++, video 출력  (0) 2019.09.22
Opencv, c++, Rectangle 출력  (0) 2019.09.22

+ Recent posts