어제보다 나은 내가 되자
특정 색상 영역 분할, inRange 본문
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
//int lower_hue = 40, upper_hue = 80;
int lower_hue, upper_hue;
Mat src, src_hsv, mask;
void on_hue_changed(int, void*) {
Scalar lowerb(lower_hue, 100, 0);
Scalar upperb(upper_hue, 255, 255);
inRange(src_hsv, lowerb, upperb, mask);
// R 160~179
// G 40~80
// B 100~140
imshow("mask", mask);
}
int main(int argc, char* argv[]) {
src = imread("candies.png");
cvtColor(src, src_hsv, COLOR_BGR2HSV); // BGR->HSV 후 src_hsv에 저장
imshow("src", src);
namedWindow("mask");
createTrackbar("Lower Hue", "mask", &lower_hue, 179, on_hue_changed);
createTrackbar("Upper Hue", "mask", &upper_hue, 179, on_hue_changed);
on_hue_changed(0, 0);
waitKey();
return 0;
}
색상은 lower_hue~upper_hue, 채도는 100~255, 명도는 0~255의 범위를 주고 이 범위에 속하면 1, 속하지 않으면 0으로 설정된다.
트랙바를 이용하여 lower와 upper를 조절해 볼 수 있다.
색상의 범위가 40~80이면 초록색, 100~140이면 파란색, 160~179이면 빨간색 영역을 찾을 수 있다.
'영상처리' 카테고리의 다른 글
이진화, threshold (0) | 2020.05.13 |
---|---|
히스토그램 역투영을 통한 피부색 영역 검출, calcBackProject (0) | 2020.05.13 |
컬러 영상 히스토그램 평활화 (0) | 2020.05.13 |
B, G, R 채널 분리 (0) | 2020.05.13 |
색반전 (0) | 2020.05.13 |
Comments