๐ค cvtColor๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ
- cvtColor ๋ ์ด๋ค ํจ์์ธ๊ฐ?
- document๋ฅผ ๋๋ฌ๋ณด๋ฉด ์๋ค์ํผ ์์์ ๋ค๋ฅธ ์๊ณต๊ฐ์ผ๋ก ๋ณํํด ์ฃผ๋ ํจ์์ด๋ค.
void cv::cvtColor(InputArray src,OutputArray dst,int code,int dstCn = 0 )
// src : ์
๋ ฅ์์
// dst : ์ถ๋ ฅ์์
// code : ์๋ณํ์ฝ๋
// dstCn : ๊ฒฐ๊ณผ ์์์ ์ฑ๋์ -> ์ ํ์ง ์์ผ๋ฉด ์๋์ค์
๐ค ์ฐ์ฐ์ ์ด์ฉํ ๋ฐฉ๋ฒ
์ด๋ค ์ฐ์ฐ์ ํตํด์ ์ปฌ๋ฌ์์์ ๊ทธ๋ ์ด๋ก ๋ง๋ค ์ ์์๊น? ๋จ์ํ๊ฒ B, G, R์ 1/3 ์ฉ ์ฉ์ ์ ์๊ฒ ์ง๋ง ๊ทธ๋ ๊ฒ ํ๋ฉด ์ ํํ ๊ทธ๋ ์ด ์ค์ผ์ผ ์์์ ์ป์๋ค๊ณ ํ๊ธด ์ด๋ ต๋ค.
RGB ์์์ → Gray์ฑ๋๋ก ๋ฐ๊พธ๊ธฐ ์ํด์๋ ( Y = 0.299R + 0.587G + 0.114B (3:6:1 ๋ถํฌ๋ก ๊ตฌ์ฑ๋์ด ์์))์ฐ์ฐ๊ณผ์ ์ด ํ์ํ๋ค.
์๋ ์ฃผ์ 1 ~ 3 ์ค ์ํ๋ ๋ฐฉ๋ฒ์ ๊ณจ๋ผ์ ์ฌ์ฉํ๋ฉด ๋จ
#define RGB2GRAY(r, g, b)((4899*(r) + 9617*(g) + 1868*(b))>>14)
// 14๋ฒ shift ์ฐ์ฐ (๊ธฐ์กด์ 0.299~~ ๋น์จ์ 2^14 ์น์ ๊ณฑํ ๊ฒ์ด 4899) -> ์ด๊ฑธ ๋ค์ ์ญ์ผ๋ก 2^14์ผ๋ก ๋๋๋ ๊ฒ
// 1000์ผ๋ก ๋๋๋ ๊ฒ๋ณด๋ค ์ํํธ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ๋น ๋ฅด๊ฒ ์ฐ์ฐ์ด ๊ฐ๋ฅ
// 2^16๋ณด๋ค ์๊ณ ์ถฉ๋ถํ ํฐ ์๋ฅผ ์ป๊ธฐ ์ํด ์ฌ์ฉ
cv::Mat dst(src.rows, src.cols, CV_8UC1);
// ์๋ ๊ณผ์ ์ ์ฌ์ค cv::cvtColor(src, dst, COLOR_BGR2GRAY); ๋ก ํํ ๊ฐ๋ฅ
for (int y = 0; y < src.rows; y++){
for (int x = 0; x<src.cols ; x++){
cv::Vec3b& p1 = src.at<cv::Vec3b>(y, x);
uchar b = p1[0];
uchar g = p1[1];
uchar r = p1[2];
// 1. ์ค์์ฐ์ฐ์ ๋ง์ด ํ๋ฉด ๋๋ ค์ง
// uchar gray = (uchar)(0.2999 * r + 0.587 * g + 0.114 * b + 0.5);
// 2. 1000์ผ๋ก ๋๋๋ ๊ณผ์ ์ ๊ฐ์ง ์๋ ์์ง๋ง ์ญ์ ์ฐ์ฐ์ด ์ถ๊ฐ๋จ
//uchar gray = (uchar)((299*r+587*g+114*b)/1000);
// 3. shift ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ
uchar gray= RGB2GRAY(r, g, b);
dst.at<uchar>(y, x) = gray;
}
}
๐ ์ฐ์ฐ์ ์ด์ฉํ ๋ฐฉ๋ฒ ์ค ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ด์
- ์ง์ ์ ์ธ ๊ณ์ฐ์ ์ด์ฉํด ์ปฌ๋ฌ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ ์ด์ค์ผ์ผ๋ก ๋ณํํ๋ฉด์ ์๋ ์ฌ์ง๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ง์ฃผํ๋ค.
- ์๋ณธ ์์์ ํฌ๊ธฐ์ 1/3๋ก ์ถ๋ ฅ์ด๋ฏธ์ง๊ฐ ์์ฑ๋์๋ค.
- ์ ๊ทธ๋ฌ๋ดใน๊ฐ.. ๊ณ ๋ฏผ์ ์ข ํด๋ณด์ ํ๋ค๊ฐ!
- ์ถ๋ ฅ ์์์ ์ ์ธํ๋ ๋ถ๋ถ์ธ๋ฐ ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง ํ์ ์ด ์๋ Color ์ด๋ฏธ์ง ํ์ CV_8UC3๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ
cv::Mat dst(src.rows, src.cols, CV_8UC3);
- ์์ ๊ฐ์ด ์ง์ ํ ํ์ for ํจ์ ์์ ํฝ์ ๋ณ๋ก ๊ณ์ฐํ ๊ฐ์ ์๋์ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์ ๋ ฅํ๊ฒ ๋๋ฉด
dst.at<uchar>(y,x) = gray;
CV_8UC1์ผ๋ก ์ง์ ํด์ [512x512]๋ง ์์ด๋ ๋ ๊ฐ๋ค์ด [512x512(x3)]์ผ๋ก ๋์ด๋๋ฉด์ ๊ทธ๋ฆผ์ด 1/3์ผ๋ก ์์ถ๋๋ ํ์์ด ๋ฐ์ํ ์๋ ์๋ค.
** ๋ด์ฉ์ ์ด์์ด ์๋ค๋ฉด ๋๊ธ๋ก ์ง์ ๋ถํ๋๋ฆฝ๋๋ค.
'Done > C++_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Ubuntu CMake] OpenCV ์ํ๋ ํด๋์ build & Install (0) | 2023.06.01 |
---|---|
[Ubuntu CMake] VSCode CMake build&debug (C++) (0) | 2023.06.01 |
[OpenCV C++] ์ด๋ฏธ์ง ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๊ธฐ , ์ฐฝ๋ซ๊ธฐ (CV ํจ์ ์ค๋ช - 1) (0) | 2023.06.01 |
[OpenCV C++] ์ด๋ฏธ์ง ๋ถ๋ฌ์ค๊ณ ์ ์ฅํ๊ธฐ (Ubuntu CMakeLists, Command args ์ฐ๊ฒฐ, Clion) (0) | 2023.06.01 |
[Python] Visualization tool (0) | 2023.01.31 |