์์์ ๋ ผ๋ฆฌ ์ฐ์ฐ ( + xor ์ฐ์ฐ )
์์์ ๋ ผ๋ฆฌ ์ฐ์ฐ
์์์ ๋ ผ๋ฆฌ ์ฐ์ฐ์ ๊ฐ ํฝ์ ๊ฐ์ ๋ํ์ฌ ๋นํธ ๋จ์๋ก ์ด๋ฃจ์ด์ง๋ค.
๊ทธ๋ ์ด ์ค์ผ์ผ ์์์ ๊ฒฝ์ฐ, ํ ํฝ์ (1byte=8bit)์ ๊ตฌ์ฑํ๋ ์ฌ๋๊ฐ์ ๋นํธ์ ๊ฐ๊ฐ ๋ ผ๋ฆฌ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ง๋ค.
์๋ฅผ ๋ค์ด ๋ ๊ฐ์ ์ ๋ ฅ ์์์์ ํน์ ์ขํ์ ์๋ ํฝ์ ์ ๊ทธ๋ ์ด์ค์ผ์ผ ๊ฐ์ด(0~255) ๊ฐ๊ฐ 110๊ณผ 200์ธ ๊ฒฝ์ฐ, ์๋์ ๊ฐ์ด ์ฐ์ฐ๋๋ค.
110 = 01101110(2) | |
200 = 11001000(2) | |
110 AND 200 | 01001000(2)=72 |
110 OR 200 | 11101110(2)=238 |
110 XOR 200 | 10100110(2)=166 |
NOT 110 | 10010001(2)=145 |
OpenCV์์๋ AND,OR,XOR,NOT ์ ๋ ผ๋ฆฌ์ฐ์ฐ ํจ์๋ฅผ ์ ๊ณตํ๋ค.
cv2.bitwise_and(src1,src2)
cv2.bitwise_or(src1,src2)
cv2.bitwise_xor(src1,src2)
cv2.bitwise_not(src1) //not์ ํผ์ฐ์ฐ์๊ฐ ํ๋๋ฟ์ธ ๋จํญ์ฐ์ฐ์์ด๋ฏ๋ก ํ๋์ ์์๋ง์ ์ ๋ ฅ๋ฐ๋๋ค.
ํฐ์์ ํฝ์ ๊ฐ์ 255๋ก ๋ชจ๋ ๋นํธ๊ฐ 1๋ก ์ค์ ๋ 11111111(2),
๊ฒ์ ์์ ํฝ์ ๊ฐ์ 0์ผ๋ก ๋ชจ๋ ๋นํธ๊ฐ 0์ผ๋ก ์ค์ ๋์ด 00000000(2)์ด๋ค.
ํฐ์์ ํฝ์ (11111111(2))์ ๋ค๋ฅธ ์์(new_src๋ผ ๊ฐ์ )์ ๊ฐ์ ์์น ํฝ์ ๊ณผ and ์ฐ์ฐ์ ํ๊ฒ ๋๋ค๋ฉด, ๊ทธ ํฝ์ ์์น์๋ new_src์ ํฝ์ ์ด ๊ทธ๋๋ก ๋ฐ์๋๊ฒ ๋ ๊ฒ์ด๋ค. ( 1 and 1 => 1, 1 and 0 => 0 ์ด๊ธฐ ๋๋ฌธ )
or ์ฐ์ฐ์ ํ๋ค๋ฉด ์ ์ฒด ์์์ด ํฐ์์ด ๋ ๊ฒ์ด๋ค. (1 or 1 => 1, 1 or 0 => 1)
xor ์ฐ์ฐ์ ํ๋ค๋ฉด new_src์ ๊ฐํฝ์ ์ ๋นํธ๋ค์ด ๋ชจ๋ ๋ฐ์ ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๊ฒ์ด๋ค (1 xor 1 => 0, 1xor 0 => 1)
not ์ฐ์ฐ์ ํด๋น์์์ ๊ฐ ํฝ์ ๋ชจ๋ ๋นํธ๋ฅผ ๋ฐ์ ์ํจ๋ค.
๋ฐฐํ์ ๋ ผ๋ฆฌํฉ
XOR exclusive or : ์ฃผ์ด์ง 2๊ฐ์ ๋ช ์ ๊ฐ์ด๋ฐ 1๊ฐ๋ง ์ฐธ์ผ ๊ฒฝ์ฐ ํ๋จํ๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์ด๋ฉฐ
exclusive OR, exclusive NOR, ๋ณดํต exclusive์ x๋ฅผ ๋ฐ์์ XOR๋ก ๋ง์ด ์ฌ์ฉํ๋ค.
exclusive๋ '๋ฐฐํ์ '์ด๋ผ๋ ๋ป์ผ๋ก, ์ฐ๋ฆฌ๋ค์ ์ผ์์์์ ๋จ์ ๋ฐฐ์ฒํ๋ ๊ฒ์ ๋ณดํต ๋ฐฐํ์ ์ด๋ผ๊ณ ๋งํ๋ค.
์ด๋ฅผ ์๊ฐํด๋ณด๋ฉด 0 ๊ณผ 1 ๊ฐ์ด ๋นํธ๊ฐ ์๋ก ๋ค๋ฅผ ๊ฒฝ์ฐ(์ฆ, ๋ฐฐํ์ ์ผ ๊ฒฝ์ฐ) ์ 1(์ฐธ), 0 xor 0, 1 xor 1๊ณผ ๊ฐ์ด ์๋ก ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ฐฐํ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ 0(๊ฑฐ์ง)์ด ๋ ผ๋ฆฌ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋๋ค.
๊ฐ๋จํ ์๊ฐํ๋ฉด ๊ฐ์ผ๋ฉด 0, ๋ค๋ฅผ ๋ 1
exclusive, ๋ฐฐํ์ ์ด๋ผ๋ ๋ป์ ๋ ์ฌ๋ ค๋ณด๋ฉด ํ๊ฐ๋ฆฌ์ง ์์ ๊ฒ ๊ฐ๋ค.