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

[C++ ๋กœ OpenCV ๊ตฌํ˜„ํ•˜๊ธฐ] (4) Drawing shapes and text ๋ณธ๋ฌธ

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

[C++ ๋กœ OpenCV ๊ตฌํ˜„ํ•˜๊ธฐ] (4) Drawing shapes and text

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

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

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

 

๐ŸŒ€ Drawing shapes

๐Ÿ’ง [Default] Drawing shapes

#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;

// #4. Drawing shapes and text
void main() {
	// Mat์€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ด์„ ๊ฐ์ฒด์ด๋‹ค. ํ–‰๋ ฌ ๊ตฌ์„ฑ
	Mat img(512, 512, CV_8UC3, Scalar(255, 0, 255));		// Blank image
	imshow("Image", img);

	waitKey(0);
}

 

๐Ÿ’ง[Circle] Drawing shapes

circle( img, Point(x, y), radius, Scalar(b,g,r), thickness, lineType, shift ) 

 

img : ์›์„ ๊ทธ๋ ค๋„ฃ์„ ์ด๋ฏธ์ง€ ์ž…๋ ฅ

Point(x, y) : ์›์˜ ์ค‘์‹ฌ ์œ„์น˜

radius : ์›์˜ ๋ฐ˜์ง€๋ฆ„, ์ˆซ์ž๋กœ๋งŒ ์ž…๋ ฅ

scalar(b, g, r) : ์„ ์˜ ์ƒ‰์ƒ์„ b, g, r ์ˆœ์œผ๋กœ ์ž…๋ ฅ

thickness : ์„ ์˜ ๊ตต๊ธฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

lineType : ์„ ์˜ ํƒ€์ž…์„ ์„ค์ • ๊ฐ€๋Šฅ,

      โ–บ FILLED : ์•ˆ์„ ์ฑ„์›Œ ๋„ฃ์Œ , -1

      โ–บ LINE_4 : 4 connected line , 4

      โ–บ LINE_8 : 8 connected line , 8

      โ–บ LINE_AA : ์•ˆํ‹ฐ์•จ๋ฆฌ์–ด์‹ฑ , 16

shift : ๊ทธ๋ƒฅ 0

#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;

// #4. Drawing shapes and text
void main() {
	// Mat์€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ด์„ ๊ฐ์ฒด์ด๋‹ค. ํ–‰๋ ฌ ๊ตฌ์„ฑ
	Mat img(512, 512, CV_8UC3, Scalar(255, 0, 100));		// Blank image
	
	// circle( img, Point(x, y), radius, Scalar(b,g,r), thickness, lineType, shift )
	circle(img, Point(256, 256), 155, Scalar(0, 69, 255), 10);
	imshow("Image", img);

	waitKey(0);
}

 

๐Ÿ’ง[Rectangle] Drawing shapes

rectangle( img , Rect , Scalar(b, g, r), thickness, lineType, shift )

 

img : ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ ค๋„ฃ์„ ์ด๋ฏธ์ง€ ์ž…๋ ฅ

Rect : ์‚ฌ๊ฐํ˜•์˜ ๋ฒ”์œ„

      โ–บ Rect( Point(x1, y1), Point(x2, y2) )  :  ๋‘ ์ขŒํ‘œ๋ฅผ ์ด์šฉํ•œ ์‚ฌ๊ฐํ˜• ๋ฒ”์œ„

      โ–บ Rect( x, y, width, height )  :  x, y ์ขŒํ‘œ์—์„œ๋ถ€ํ„ฐ width ์™€ height ๊นŒ์ง€์˜ ์‚ฌ๊ฐํ˜• ๋ฒ”์œ„ 

          ๋‘ ๋ฐฉ๋ฒ• ์ค‘ ํƒ 1

scalar(b, g, r) : ์„ ์˜ ์ƒ‰์ƒ์„ b, g, r ์ˆœ์œผ๋กœ ์ž…๋ ฅ  

thickness : ์„ ์˜ ๊ตต๊ธฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

lineType : ์„ ์˜ ํƒ€์ž…์„ ์„ค์ • ๊ฐ€๋Šฅ,

      โ–บ FILLED : ์•ˆ์„ ์ฑ„์›Œ ๋„ฃ์Œ , -1

      โ–บ LINE_4 : 4 connected line , 4

      โ–บ LINE_8 : 8 connected line , 8

      โ–บ LINE_AA : ์•ˆํ‹ฐ์•จ๋ฆฌ์–ด์‹ฑ , 16

shift : ๊ทธ๋ƒฅ 0

#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;

// #4. Drawing shapes and text
void main() {
	// Mat์€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ด์„ ๊ฐ์ฒด์ด๋‹ค. ํ–‰๋ ฌ ๊ตฌ์„ฑ
	Mat img(512, 512, CV_8UC3, Scalar(255, 0, 100));		// Blank image
	
	// circle( img, Point(x, y), radius, Scalar(b,g,r), thickness, lineType, shift )
	circle(img, Point(256, 256), 155, Scalar(0, 69, 255), 10);
	// rectangle( img , Rect , Scalar(b, g, r), thickness, lineType, shift )
	rectangle(img, Point(130, 226), Point(382, 286), Scalar(255, 255, 0), FILLED);

	imshow("Image", img);

	waitKey(0);
}

 

๐Ÿ’ง[Line] Drawing shapes

line( Input Output Array, pt1, pt2, scalar(b,g,r), thickness, lineType,  shift ) 

 

Input Output Array : ์ง์„ ์„ ๊ทธ๋ ค๋„ฃ์„ ์ด๋ฏธ์ง€ ์ž…๋ ฅ

pt1, pt2 : ์ง์„ ์˜ ์–‘ ๋ ์ขŒํ‘œ์„ ์ž…๋ ฅ, Point(x, y)

scalar(b, g, r) : ์ง์„ ์˜ ์ƒ‰์ƒ์„ b, g, r ์ˆœ์œผ๋กœ ์ž…๋ ฅ

thickness : ์ง์„ ์˜ ๊ตต๊ธฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

lineType : ์ง์„ ์˜ ํƒ€์ž…์„ ์„ค์ • ๊ฐ€๋Šฅ,

      โ–บ FILLED : ์•ˆ์„ ์ฑ„์›Œ ๋„ฃ์Œ , -1

      โ–บ LINE_4 : 4 connected line , 4

      โ–บ LINE_8 : 8 connected line , 8

      โ–บ LINE_AA : ์•ˆํ‹ฐ์•จ๋ฆฌ์–ด์‹ฑ , 16

shift : ๊ทธ๋ƒฅ 0

#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;

// #4. Drawing shapes and text
void main() {
	// Mat์€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ด์„ ๊ฐ์ฒด์ด๋‹ค. ํ–‰๋ ฌ ๊ตฌ์„ฑ
	Mat img(512, 512, CV_8UC3, Scalar(255, 0, 100));		// Blank image
	
	// circle( img, Point(x, y), radius, Scalar(b,g,r), thickness, lineType, shift )
	circle(img, Point(256, 256), 155, Scalar(0, 69, 255), 10);
	// rectangle( img , Rect , Scalar(b, g, r), thickness, lineType, shift )
	rectangle(img, Point(130, 226), Point(382, 286), Scalar(255, 255, 0), FILLED);
	// line( Input Output Array, pt1, pt2, scalar(b,g,r), thickness, lineType,  shift ) 
	line(img, Point(130, 296), Point(382, 454), Scalar(255, 12, 4), 3);

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

 

๐ŸŒ€ Drawing text

๐Ÿ’งText

putText( img, string, Point(x,y), font face, font scale, color, thickness, line type, bottom left origin )

 

img: ์ž…๋ ฅํ•  ์ด๋ฏธ์ง€, ์ž…๋ ฅํ•œ ์ด๋ฏธ์ง€์— ํ…์ŠคํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฒŒ ๋œ๋‹ค.

string : ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์€ ํ…์ŠคํŠธ, char ์ž๋ฃŒํ˜•์ด๋ฉด ๋œ๋‹ค.

Point(x, y) : ํ…์ŠคํŠธ๋ฅผ ์‚ฝ์ž…ํ•  ์œ„์น˜, xy์ขŒํ‘œ๊ณ„๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

font face : ๊ธ€๊ผด

      โ–บ ์„ธ๋ฆฌํ”„(Serif)๋Š” ํš ๋์ด ๋‚š์‹œ๋ฐ”๋Š˜์ฒ˜๋Ÿผ ๋‚ ์นด๋กญ๊ฒŒ ํŠ€์–ด๋‚˜์˜จ ํฐํŠธ (๋ช…์กฐ์ฒด)

      โ–บ ์‚ฐ ์„ธ๋ฆฌํ”„(San-Serif)๋Š” ์„ธ๋ฆฌํ”„์˜ ๋ฐ˜๋Œ€๋กœ, ํŠ€์–ด๋‚˜์˜จ ๋ถ€๋ถ„์ด ์—†์Œ (๊ณ ๋”•์ฒด)

      โ–บ Option  /  Value  /  Explain
             โ–บ FONT_HERSHEY_SIMPLEX / 0 / ์ค‘๊ฐ„ ํฌ๊ธฐ ์‚ฐ์„ธ๋ฆฌํ”„ ํฐํŠธ
             โ–บ FONT_HERSHEY_PLAIN / 1 / ์ž‘์€ ํฌ๊ธฐ ์‚ฐ์„ธ๋ฆฌํ”„ ํฐํŠธ
             โ–บ FONT_HERSHEY_DUPLEX / 2 / 2์ค„ ์‚ฐ์„ธ๋ฆฌํ”„ ํฐํŠธ
             โ–บ FONT_HERSHEY_COMPLEX / 3 / ์ค‘๊ฐ„ ํฌ๊ธฐ ์„ธ๋ฆฌํ”„ ํฐํŠธ
             โ–บ FONT_HERSHEY_TRIPLEX / 4 / 3์ค„ ์„ธ๋ฆฌํ”„ ํฐํŠธ
             โ–บ FONT_HERSHEY_COMPLEX_SMALL / 5 / COMPLEX ๋ณด๋‹ค ์ž‘์€ ํฌ๊ธฐ
             โ–บ FONT_HERSHEY_SCRIPT_SIMPLEX / 6 / ํ•„๊ธฐ์ฒด ์Šคํƒ€์ผ ํฐํŠธ
             โ–บ FONT_HERSHEY_SCRIPT_COMPLEX / 7 / ๋ณต์žกํ•œ ํ•„๊ธฐ์ฒด ์Šคํƒ€์ผ
             โ–บ FONT_ITALIC / 16 / ์ดํƒˆ๋ฆญ์ฒด๋ฅผ ์œ„ํ•œ ํ”Œ๋ž˜๊ทธ

font scale : ํฐํŠธ ํฌ๊ธฐ

color : scalar ๊ฐ’์˜ ์ƒ‰์ƒ ์ •๋ณด ์ž…๋ ฅ

      โ–บ scalar( Blue, Green, Red)

thickness : ํฐํŠธ ๊ตต๊ธฐ

line type : ๊ธ€์ž ์„ ์˜ ํ˜•ํƒœ

bottom left origin : ์˜์ƒ์˜ ์›์  ์ขŒํ‘œ๋ฅผ ์ขŒ์ธก ํ•˜๋‹จ์œผ๋กœ ์„ค์ •

#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;

// #4. Drawing shapes and text
void main() {
	// Mat์€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ด์„ ๊ฐ์ฒด์ด๋‹ค. ํ–‰๋ ฌ ๊ตฌ์„ฑ
	Mat img(512, 512, CV_8UC3, Scalar(255, 0, 100));		// Blank image
	
	// circle( img, Point(x, y), radius, Scalar(b,g,r), thickness, lineType, shift )
	circle(img, Point(256, 256), 155, Scalar(0, 69, 255), 10);
	// rectangle( img , Rect , Scalar(b, g, r), thickness, lineType, shift )
	rectangle(img, Point(130, 226), Point(382, 286), Scalar(255, 255, 0), FILLED);
	// line( Input Output Array, pt1, pt2, scalar(b,g,r), thickness, lineType,  shift ) 
	line(img, Point(130, 296), Point(382, 454), Scalar(255, 12, 4), 3);

	// putText( img, string, Point(x,y), font face, font scale, color, thickness, line type, bottom left origin )
	putText(img, "gani hello", Point(147, 242), FONT_HERSHEY_DUPLEX, 2, Scalar(0, 34, 255), 2);

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

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