๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[C++ ๋กœ OpenCV ๊ตฌํ˜„ํ•˜๊ธฐ] (6) Color Detection ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/Image Processing

[C++ ๋กœ OpenCV ๊ตฌํ˜„ํ•˜๊ธฐ] (6) Color Detection

์ง•์ง•์•ŒํŒŒ์นด 2023. 6. 12. 16:47
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” Murtaza's Workshop ์˜ ์œ ํŠœ๋ธŒ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

=> LEARN OPENCV C++ in 4 HOURS | Including 3x Projects | Computer Vision

 

๐ŸŒ€ Color Detection

๐Ÿ’ง HSV

3๊ฐœ์˜ ์ฑ„๋„ H(Hue, ์ƒ‰์กฐ), S(Saturation, ์ฑ„๋„), V(Value, ๋ช…๋„) ๊ฐ–๋Š” ์ƒ‰์ƒ ์ด๋ฏธ์ง€ ํ‘œํ˜„๋ฒ•

 

H ๊ฐ’์€ ์ด๋ฏธ์ง€๊ฐ€ ์–ด๋–ค ์ƒ‰์ƒ์ธ์ง€

S๋Š” ์ด๋ฏธ์ง€์˜ ์ƒ‰์ƒ์ด ์–ผ๋งˆ๋‚˜ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€

V๋Š” ์ƒ‰์ƒ์ด ์–ผ๋งˆ๋‚˜ ๋ฐ์€์ง€ ์–ด๋‘์šด์ง€๋ฅผ ํ‘œํ˜„

#include <opencv2/opencv.hpp>		// OpenCV์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ
#include <opencv2/videoio.hpp>		// ๋น„๋””์˜ค ์ถ”์  ๋ฐ ๋ฐฐ๊ฒฝ segmentation๊ณผ ๊ด€๋ จ๋œ ๋ฃจํ‹ด
#include <opencv2/imgcodecs.hpp>	// ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์„ ์–ธ (Mat ์ด๋‚˜ Point๊ฐ€ ์„ ์–ธ, ํ–‰๋ ฌ ์—ฐ์‚ฐ ํ˜น์€ ๋ฒกํ„ฐ ์—ฐ์‚ฐ)
#include <opencv2/highgui.hpp>		// ์œˆ๋„์šฐ ํ™”๋ฉด, UI์ฒ˜๋ฆฌ(์Šฌ๋ผ์ด๋”, ๋ฒ„ํŠผ ๋“ฑ) ๋ฐ ๋งˆ์šฐ์Šค ์ œ์–ด ๊ฐ€๋Šฅ
#include <iostream>
#include <stdio.h>

using namespace cv;
using namespace std;

// #6. Color Detection
Mat imgHSV;

void main() {
	string path = "Resources/alpaca.jpg";
	Mat img = imread(path);

	cvtColor(img, imgHSV, COLOR_BGR2HSV);

	imshow("Image", img);
	imshow("Image HSV", imgHSV);
	waitKey(0);
}

 

๐Ÿ’ง inRange

ํŠน์ • ์ƒ‰์ƒ์„ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” inRange๋ฅผ ์ด์šฉํ•ด ์ฐจ์„ ์„ ์ถ”์ถœ

inRange(src, lower range, upper range, dst ) 


src : ์ž…๋ ฅ ํ–‰๋ ฌ
lowerb : ํ•˜ํ•œ ๊ฐ’ ํ–‰๋ ฌ ๋˜๋Š” ์Šค์นผ๋ผ
upperb : ์ƒํ•œ ๊ฐ’ ํ–‰๋ ฌ ๋˜๋Š” ์Šค์นผ๋ผ
dst : ์ž…๋ ฅ ์˜์ƒ๊ณผ ๊ฐ™์€ ํฌ๊ธฐ์˜ ๋งˆ์Šคํฌ ์˜์ƒ

#include <opencv2/opencv.hpp>		// OpenCV์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ
#include <opencv2/videoio.hpp>		// ๋น„๋””์˜ค ์ถ”์  ๋ฐ ๋ฐฐ๊ฒฝ segmentation๊ณผ ๊ด€๋ จ๋œ ๋ฃจํ‹ด
#include <opencv2/imgcodecs.hpp>	// ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์„ ์–ธ (Mat ์ด๋‚˜ Point๊ฐ€ ์„ ์–ธ, ํ–‰๋ ฌ ์—ฐ์‚ฐ ํ˜น์€ ๋ฒกํ„ฐ ์—ฐ์‚ฐ)
#include <opencv2/highgui.hpp>		// ์œˆ๋„์šฐ ํ™”๋ฉด, UI์ฒ˜๋ฆฌ(์Šฌ๋ผ์ด๋”, ๋ฒ„ํŠผ ๋“ฑ) ๋ฐ ๋งˆ์šฐ์Šค ์ œ์–ด ๊ฐ€๋Šฅ
#include <iostream>
#include <stdio.h>

using namespace cv;
using namespace std;

// #6. Color Detection
Mat imgHSV, mask;
int hmin = 0, smin = 110, vmin = 153;
int hmax = 19, smax = 240, vmax = 255;

void main() {

	string path = "Resources/shapes.png";
	Mat img = imread(path);

	cvtColor(img, imgHSV, COLOR_BGR2HSV);

	namedWindow("Trackbars", (640, 200));
	createTrackbar("Hue Min", "Trackbars", &hmin, 179);
	createTrackbar("Hue Max", "Trackbars", &hmax, 179);
	createTrackbar("Sat Min", "Trackbars", &smin, 255);
	createTrackbar("Sat Max", "Trackbars", &smax, 255);
	createTrackbar("Val Min", "Trackbars", &vmin, 255);
	createTrackbar("Val Max", "Trackbars", &vmax, 255);

	while (true) {

		Scalar lower(hmin, smin, vmin);
		Scalar upper(hmax, smax, vmax);
		// inRange(src, lower range, upper range, dst) 
		// : ํŠน์ • ์ƒ‰์ƒ์„ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” inRange๋ฅผ ์ด์šฉํ•ด ์ฐจ์„ ์„ ์ถ”์ถœ
		inRange(imgHSV, lower, upper, mask);

		imshow("Image", img);
		imshow("Image HSV", imgHSV);
		imshow("Image Mask", mask);
		waitKey(1);
	}
}

728x90
๋ฐ˜์‘ํ˜•
Comments