๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[v0.23]์์์ฒ๋ฆฌ_ ๋ธ๋ฌ๋งํ์ฉ & ๋ชจ์์ดํฌ ์ฒ๋ฆฌ, ์ด๋ฏธ์ง ์ค์ผ์น ํจ๊ณผ ๋ณธ๋ฌธ
[v0.23]์์์ฒ๋ฆฌ_ ๋ธ๋ฌ๋งํ์ฉ & ๋ชจ์์ดํฌ ์ฒ๋ฆฌ, ์ด๋ฏธ์ง ์ค์ผ์น ํจ๊ณผ
์ง์ง์ํ์นด 2022. 1. 12. 00:40220112 ์์ฑ
<๋ณธ ๋ธ๋ก๊ทธ๋ ๊ทํ์ด ์์ฌ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค>
OpenCV - 21. ๋ธ๋ฌ๋ง์ ํ์ฉํ ๋ชจ์์ดํฌ ์ฒ๋ฆฌ, ์ด๋ฏธ์ง ์ค์ผ์น ํจ๊ณผ ์ ์ฉํ๊ธฐ
์ด๋ฒ ํฌ์คํ ์์๋ ๋ธ๋ฌ๋ง์ ํ์ฉํ ๋ชจ์์ดํฌ ์ฒ๋ฆฌ์ ์ด๋ฏธ์ง์ ์ค์ผ์น ํจ๊ณผ๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์ญ์ 'ํ์ด์ฌ์ผ๋ก ๋ง๋๋ OpenCV ํ๋ก์ ํธ(์ด์ธ์ฐ ์ )'๋ฅผ ์ ๋ฆฌ
bkshin.tistory.com
1. ๋ธ๋ฌ๋ง์ ํ์ฉํ ๋ชจ์์ดํฌ ์ฒ๋ฆฌ
: ๋ง์ฐ์ค๋ก ๋๋๊ทธํ์ฌ ์ ํํ ๋ถ๋ถ์ ๋ธ๋ฌ๋ง ํจ๊ณผ๋ก ๋ชจ์์ดํฌ ์ฒ๋ฆฌ
: ๋ง์ฐ์ค ๋๋๊ทธ ํ ์ํฐ๋ฅผ ๋๋ฌ์ฃผ๊ธฐ
# ๋ธ๋ฌ๋ง์ ํ์ฉํ ๋ชจ์์ดํฌ
import cv2
ksize = 30 # ๋ธ๋ฌ ์ฒ๋ฆฌ์ ์ฌ์ฉํ ์ปค๋ ํฌ๊ธฐ
win_title = 'mosaic' # ์ฐฝ ์ ๋ชฉ
img = cv2.imread('img/taekwonv1.jpg') # ์ด๋ฏธ์ง ์ฝ๊ธฐ
while True:
x,y,w,h = cv2.selectROI(win_title, img, False) # ๊ด์ฌ์์ญ ์ ํ
if w > 0 and h > 0: # ํญ๊ณผ ๋์ด๊ฐ ์์์ด๋ฉด ๋๋๊ทธ ๋ฐฉํฅ์ด ์ณ์
roi = img[y:y+h, x:x+w] # ๊ด์ฌ์์ญ ์ง์
roi = cv2.blur(roi, (ksize, ksize)) # ๋ธ๋ฌ(๋ชจ์์ดํฌ) ์ฒ๋ฆฌ
img[y:y+h, x:x+w] = roi # ์๋ณธ ์ด๋ฏธ์ง์ ์ ์ฉ
cv2.imshow(win_title, img)
else:
break
cv2.destroyAllWindows()
2. ์ด๋ฏธ์ง์ ์ค์ผ์น ํจ๊ณผ ์ ์ฉํ๊ธฐ
: ์นด๋ฉ๋ผ๋ก ์ฐ์ ์ด๋ฏธ์ง์ 2D ์ค์ผ์น ํจ๊ณผ๋ฅผ ์ ์ฉ
# ์ค์ผ์น ํจ๊ณผ
import cv2
import numpy as np
# ์นด๋ฉ๋ผ ์ฅ์น ์ฐ๊ฒฐ
cap = cv2.VideoCapture(0)
while cap.isOpened():
# ํ๋ ์ ์ฝ๊ธฐ
ret, frame = cap.read()
# ์๋ ํฅ์์ ์ํด ์์ํฌ๊ธฐ๋ฅผ ์ ๋ฐ์ผ๋ก ์ถ์
frame = cv2.resize(frame, None, fx=0.5, fy=0.5, \
interpolation=cv2.INTER_AREA)
if cv2.waitKey(1) == 27: # escํค๋ก ์ข
๋ฃ
break
# ๊ทธ๋ ์ด ์ค์ผ์ผ๋ก ๋ณ๊ฒฝ
img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# ์ก์ ์ ๊ฑฐ๋ฅผ ์ํด ๊ฐ์ฐ์์ ํ๋ฌ ํํฐ ์ ์ฉ(๋ผํ๋ผ์์ ํํฐ ์ ์ฉ ์ ์ ํ์)
img_gray = cv2.GaussianBlur(img_gray, (9,9), 0)
# ๋ผํ๋ผ์์ ํํฐ๋ก ์ฃ์ง ๊ฒ์ถ
edges = cv2.Laplacian(img_gray, -1, None, 5)
# ์ค๋ ์ํ๋๋ก ๊ฒฝ๊ณ ๊ฐ ๋ง ๋จ๊ธฐ๊ณ ์ ๊ฑฐํ๋ฉด์ ํ๋ฉด ๋ฐ์ (ํฐ ๋ฐํ ๊ฒ์ ์ )
ret, sketch = cv2.threshold(edges, 70, 255, cv2.THRESH_BINARY_INV)
# ๊ฒฝ๊ณ์ ๊ฐ์กฐ๋ฅผ ์ํด ์นจ์ ์ฐ์ฐ
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3,3))
sketch = cv2.erode(sketch, kernel)
# ๊ฒฝ๊ณ์ ์์ฐ์ค๋ฝ๊ฒ ํ๊ธฐ ์ํด ๋ฏธ๋์ธ ๋ธ๋ฌ ํํฐ ์ ์ฉ
sketch = cv2.medianBlur(sketch, 5)
# ๊ทธ๋ ์ด ์ค์ผ์ผ์์ BGR ์ปฌ๋ฌ ์ค์ผ์ผ๋ก ๋ณ๊ฒฝ
img_sketch = cv2.cvtColor(sketch, cv2.COLOR_GRAY2BGR)
# ์ปฌ๋ฌ ์ด๋ฏธ์ง ์ ๋ช
์ ์ ์์ ๊ธฐ ์ํด ํ๊ท ๋ธ๋ฌ ํํฐ ์ ์ฉ
img_paint = cv2.blur(frame, (10,10) )
# ์ปฌ๋ฌ ์์๊ณผ ์ค์ผ์น ์์๊ณผ ํฉ์ฑ
img_paint = cv2.bitwise_and(img_paint, img_paint, mask=sketch)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
merged = np.hstack((img_sketch, img_paint))
cv2.imshow('Sketch Camera', merged)
cap.release()
cv2.destroyAllWindows()
์ค์ผ์น ์ฌ์ง ์์ ์์ฉ๋ฒ๋ฒ ์ด๋น...
'๐ฉโ๐ป IoT (Embedded) > Image Processing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[v0.25]์์์ฒ๋ฆฌ_ํํ ๋ณํ (0) | 2022.01.12 |
---|---|
[v0.24]์์์ฒ๋ฆฌ_์ปจํฌ์ด (์์๋ถํ ๋ฐฉ๋ฒ) (0) | 2022.01.12 |
[v0.22]์์์ฒ๋ฆฌ_๋ชจํด๋ก์ง(Morphology) ์ฐ์ฐ (0) | 2022.01.12 |
[v0.21]์์์ฒ๋ฆฌ_๋ชจํด๋ก์ง(Morphology) ์ฐ์ฐ (0) | 2022.01.11 |
[v0.20]์์์ฒ๋ฆฌ_๊ฒฝ๊ณ ๊ฒ์ถ (0) | 2022.01.11 |