๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[C++ ๋ก OpenCV ๊ตฌํํ๊ธฐ] (3) Resize and Crop ๋ณธ๋ฌธ
[C++ ๋ก OpenCV ๊ตฌํํ๊ธฐ] (3) Resize and Crop
์ง์ง์ํ์นด 2023. 6. 12. 01:23<๋ณธ ๋ธ๋ก๊ทธ๋ Murtaza's Workshop ์ ์ ํ๋ธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค :-)>
=> LEARN OPENCV C++ in 4 HOURS | Including 3x Projects | Computer Vision
๐ Resize and Crop
๐ง Resize
์ด๋ฏธ์ง๋ฅผ ํ๋ ๋๋ ์ถ์
cv2.resize ( img , dsize, fx, fy, interpolation )
img : image file
dsize : ๊ฐ๋ก, ์ธ๋ก ํํ์ ํํ์ ์ง์ ํ์ฌ, ํ๋ ๋ฐ ์ถ์ ๊ฐ๋ฅ ex) (100, 200)
fx : ๊ฐ๋ก ์ฌ์ด์ฆ์ ๋ฐฐ์ , 2๋ฐฐ ํ๋๋ 2.0 , 1/2 ์ถ์๋ 0.5 ex
fy : ์ธ๋ก ์ฌ์ด์ฆ์ ๋ฐฐ์
interpolation : ๋ณด๊ฐ๋ฒ ( ์ด๋ค ๋ฐฉ์์ผ๋ก ์ด๋ฏธ์ง ๊ฐ์ ์ฑ์ธ๊ฒ์ธ๊ฐ )
INTER_NEAREST
INTER_LINEAR
INTER_AREAINTER_CUBIC
INTER_LANCZOS4
#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;
// #3. Resize and Crop
// 1) Importing Images
void main() {
// Mat์ ์ด๋ฏธ์ง๋ฅผ ๋ด์ ๊ฐ์ฒด์ด๋ค. ํ๋ ฌ ๊ตฌ์ฑ
string path = "Resources/alpaca.jpg";
Mat img = imread(path);
Mat imgResize;
cout << img.size() << endl; // [612 X 536]
resize(img, imgResize, Size(300, 300));
imshow("Image", img);
imshow("Image Resize", imgResize);
waitKey(0);
}
๐ง Rect roi
์๋ณธ ์ด๋ฏธ์ง์์ ์ํ๋ ๋ถ๋ถ๋ง ์๋ผ์ ๊ฐ์ ธ์ค๋ ๊ฒ
์ํ๋ ํผ์ฌ์ฒด(๋์)๋ฅผ ๋ฐ๋ก ๋ถ๋ฆฌํ์ฌ ์์์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด '๊ด์ฌ์์ญ ์ค์ ' => RoI(Region of Interest)
src( Rect( x, y, width, height)) )
src : ๊ด์ฌ์์ญ์ ์ค์ ํ ์๋ณธ ์ด๋ฏธ์ง
Rect( x, y, width, height) ) : ๊ด์ฌ์์ญ์ ์ค์ ํ ์ฌ๊ฐํ์ ์ขํ( x, y), ์ฌ๊ฐํ ๋ฒ์ (width, height)
#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;
// #3. Resize and Crop
// 1) Importing Images
void main() {
// Mat์ ์ด๋ฏธ์ง๋ฅผ ๋ด์ ๊ฐ์ฒด์ด๋ค. ํ๋ ฌ ๊ตฌ์ฑ
string path = "Resources/alpaca.jpg";
Mat img = imread(path);
Mat imgResize;
Mat imgCrop;
cout << img.size() << endl; // [612 X 536]
// Resize
// : ์ด๋ฏธ์ง๋ฅผ ํ๋ ๋๋ ์ถ์
resize(img, imgResize, Size(300, 300));
// ROI (crop)
// : ์๋ณธ ์ด๋ฏธ์ง์์ ์ํ๋ ๋ถ๋ถ๋ง ์๋ผ์ ๊ฐ์ ธ์ค๋ ๊ฒ
Rect roi(100, 100, 300, 250);
imgCrop = img(roi);
imshow("Image", img);
imshow("Image Resize", imgResize);
imshow("Image Crop", imgCrop);
waitKey(0);
}