코드:
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 |